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)
Вернуться на верх