Я просто хочу использовать кеширование ViewSet слишком медленно :(, с Django REST Framework.
Я сделал это:
...
from django.utils.decorators import method_decorator
from django.views.decorators.cache import cache_page
from django.views.decorators.vary import vary_on_cookie
...
class PRPKViewSet(viewsets.ModelViewSet):
serializer_class = PrpkSerializer
queryset = Prpk.objects.all().order_by('begin')
# Authentification !
permission_classes = (IsAuthenticated,)
# Only 'get' method
http_method_names = ['get']
# Cache requested url for each user for 2 hours
# @method_decorator(vary_on_cookie)
@method_decorator(cache_page(60*2))
def get_queryset(self):
""" allow rest api to filter by submissions """
queryset = Prpk.objects.all().order_by('begin')
highway = self.request.query_params.get('highway', None)
if highway is not None:
queryset = queryset.filter(highway=highway)
return queryset
Но при запросе у меня такая ошибка:
TypeError: _wrapped_view() missing 1 required positional argument: 'request'
Memcached установлен.
Итак, могу ли я кэшировать только один ViewSet (без использования расширения?)?
Большое спасибо.
Ф.





Украсить dispatch вместо get_queryset.
@method_decorator(cache_page(60*2))
def dispatch(self, request, *args, **kwargs):
return super().dispatch(request, *args, **kwargs)
моя беда: отсутствует "возврат" :). Первый запрос: 11 с, второй вызов: 431 мс :). Это работает. А пока, пожалуйста, как мне увидеть кешированные страницы?
@fabrice правда, пропустил return, исправлено. Загляните в stackoverflow.com/questions/9048257/…, чтобы узнать, как получить исправленные страницы, поскольку это другой вопрос.
Привет спасибо. Я только что добавил функцию «отправки» над «get_queryset», но у меня есть такая ошибка: «если response.streaming или response.status_code не входит в (200, 304): AttributeError: объект 'NoneType' не имеет атрибута 'streaming' "