Django REST Framework кэширование программным способом
Из официальной документации похоже, что единственный способ кэширования с DRF - использовать декораторы .
Насколько я знаю, существует также более гибкий способ использования кэширования - прямой запрос к кэшу, как в примере ниже (source):
from django.core.cache import cache
from django.conf import settings
from django.core.cache.backends.base import DEFAULT_TIMEOUT
CACHE_TTL = getattr(settings, 'CACHE_TTL', DEFAULT_TIMEOUT)
def cached_sample(request):
if 'sample' in cache:
json = cache.get('sample')
return JsonResponse(json, safe=False)
else:
objs = SampleModel.objects.all()
json = serializers.serialize('json', objs)
# store data in cache
cache.set('sample', json, timeout=CACHE_TTL)
return JsonResponse(json, safe=False)
Этот подход дает пользователю больше контроля над тем, что и как долго мы храним в кэше.
Итак, мой вопрос заключается в следующем: есть ли способ адаптировать этот способ кэширования к простому представлению, определенному в DRF?
Пример:
# MODEL
class Item(models.Model):
code = models.CharField(max_length=8, primary_key=True)
name = models.CharField(max_length=32)
# SERIALIZER
class ItemSerializer(serializers.ModelSerializer):
class Meta:
model = Pair
fields = '__all__'
# VIEW
class ItemsList(generics.ListAPIView):
queryset = Item.objects.all()
serializer_class = ItemSerializer
def list(self, request):
queryset = self.get_queryset()
serializer = ItemSerializer(queryset, many=True)
return Response(serializer.data)