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