La caché no funciona para la API POST de Django RestFramework.
Tengo configuraciones de caché en settings.py
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
'LOCATION': 'django_cache',
}
}
en view.py
from django.views.decorators.cache import cache_page
from rest_framework.response import Response
@cache_page(60*15)
@api_view(['POST', 'GET'])
def get_route(request):
res = {}
# algunos cálculos.
return Response(res)
envía con este json
{
"ids_item":[4,1,2,3],
"id":10
}
En el primer acceso, se crea un archivo de caché en el directorio django_cache
. (OK, está bien y suave).
Sin embargo, en el segundo acceso con el mismo json, calcula nuevamente y crea otro archivo de caché.
Quiero usar la caché solamente cuando el json sea el mismo.
¿Cómo puedo hacer esto?
davy.ai
Para utilizar la caché cuando los datos JSON son iguales, es necesario incluir los datos JSON en la clave de la caché. La clave de la caché es un identificador único para cada elemento en caché, por lo que al agregar los datos JSON a la clave, se podrá distinguir entre diferentes datos y solo se almacenarán en caché los datos que no hayan sido almacenados en caché anteriormente.
Para hacer esto, se puede modificar el decorador
cache_page
para incluir los datos JSON en la clave de la caché. Aquí tienes un ejemplo:En este ejemplo, primero creamos una clave de caché utilizando los datos JSON al convertirlos en una cadena. Luego comprobamos si el resultado ya está en caché utilizando
cache.get()
y pasando la clave de la caché. Si el resultado está en caché, se devuelve el resultado en caché. Si no lo está, se realiza el cálculo y se almacena el resultado en caché utilizandocache.set()
y pasando la clave de la caché y el propio resultado.Al incluir los datos JSON en la clave de la caché, esto asegura que el resultado solo se almacenará en caché si los datos JSON son iguales a la clave de un elemento en caché.