fix redis cache & add cache to custom types search
This commit is contained in:
@@ -7,6 +7,7 @@ REDIS_URL=
|
||||
REDIS_PORT=
|
||||
REDIS_DB=
|
||||
REDIS_PASSWORD=
|
||||
REDIS_USER=
|
||||
|
||||
SQLITE_DB_PATH=
|
||||
POSTGRES_HOST=
|
||||
|
||||
28
api/views.py
28
api/views.py
@@ -2,6 +2,7 @@ from django.shortcuts import render
|
||||
from django.http import JsonResponse
|
||||
from django.db.models import Q
|
||||
from django.contrib.auth import models as auth_models
|
||||
from django.core.cache import cache
|
||||
from rest_framework import viewsets, permissions, settings
|
||||
from rest_framework.decorators import api_view
|
||||
from rest_framework.response import Response
|
||||
@@ -39,24 +40,27 @@ class AcquisitionViewSet(viewsets.ModelViewSet):
|
||||
|
||||
@api_view(['POST'])
|
||||
def custom_types_search(request):
|
||||
items = []
|
||||
cache_key = f"custom_types_search_{request.data}"
|
||||
items = cache.get(cache_key, [])
|
||||
|
||||
for q in request.data:
|
||||
conditions = Q()
|
||||
for k in q.keys():
|
||||
value = q[k]
|
||||
if not items:
|
||||
for q in request.data:
|
||||
conditions = Q()
|
||||
for k in q.keys():
|
||||
value = q[k]
|
||||
|
||||
token = k.split('___')
|
||||
key, mods = token[0], token[1:]
|
||||
token = k.split('___')
|
||||
key, mods = token[0], token[1:]
|
||||
|
||||
cond = Q(**{key: value})
|
||||
cond = Q(**{key: value})
|
||||
|
||||
if "not" in mods:
|
||||
cond = ~cond
|
||||
if "not" in mods:
|
||||
cond = ~cond
|
||||
|
||||
conditions = conditions & cond
|
||||
conditions = conditions & cond
|
||||
|
||||
items.extend(sde_models.SDEType.objects.filter(conditions))
|
||||
items.extend(sde_models.SDEType.objects.filter(conditions))
|
||||
cache.set(cache_key, items, 60 * 60)
|
||||
|
||||
paginator = settings.api_settings.DEFAULT_PAGINATION_CLASS()
|
||||
result_page = paginator.paginate_queryset(items, request)
|
||||
|
||||
@@ -30,7 +30,7 @@ services:
|
||||
- ./api:/app/api
|
||||
- ./sde:/app/sde
|
||||
- ./manage.py:/app/manage.py
|
||||
# - ./static_eve:/app/static_eve
|
||||
- ./static_eve:/app/static_eve
|
||||
command: ["uvicorn", "marbas.asgi:application", "--host", "0.0.0.0", "--port", "8000", "--reload"]
|
||||
depends_on:
|
||||
redis:
|
||||
|
||||
@@ -4,5 +4,4 @@ from rest_framework import pagination
|
||||
class CustomPagination(pagination.PageNumberPagination):
|
||||
page_size = 10
|
||||
page_size_query_param = 'page_size'
|
||||
max_page_size = 250
|
||||
|
||||
max_page_size = 1000
|
||||
|
||||
@@ -92,10 +92,9 @@ WSGI_APPLICATION = 'marbas.wsgi.application'
|
||||
CACHES = {
|
||||
"default": {
|
||||
"BACKEND": "django.core.cache.backends.redis.RedisCache",
|
||||
"LOCATION": f"redis://{os.getenv('REDIS_URL')}:{os.getenv('REDIS_PORT', '6379')}/{os.getenv('REDIS_DB', '0')}",
|
||||
"LOCATION": f"redis://{os.getenv('REDIS_USER', '')}:{os.getenv('REDIS_PASSWORD', '')}@{os.getenv('REDIS_URL')}:{os.getenv('REDIS_PORT', '6379')}",
|
||||
"OPTIONS": {
|
||||
"CLIENT_CLASS": "django_redis.client.DefaultClient",
|
||||
"PASSWORD": os.getenv("REDIS_PASSWORD"),
|
||||
"db": os.getenv('REDIS_DB', '0'),
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user