django - 使用 DRF 缓存 ViewSet:TypeError: _wrapped_view()
问题描述
我只想对 ViewSet 使用缓存太慢:(,使用 Django REST 框架。
我已经这样做了:
...
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(不使用扩展名吗?)?
非常感谢。
F。
解决方案
装饰dispatch
而不是get_queryset
。
@method_decorator(cache_page(60*2))
def dispatch(self, request, *args, **kwargs):
return super().dispatch(request, *args, **kwargs)
推荐阅读
- android - 如何修复反应原生 apk 不更新问题
- ios - 调用 `tableView.reloadData()` 后 TableView 无法重新加载
- sql - SQL Redshift:按多列转置和分组
- arkit - 使用 ARKit 进行耳朵和颈部检测
- javascript - 使用 bootstrapswitcher 时不会触发 React onChange
- excel - Excel多个V查找公式粘贴到VBA使用的范围
- r - 在数据框的两列之间绘制集群数据点
- ios - 如何在 iOS App Swift 4 中集成 Paypal 付款方式?
- android-automotive - 安装安卓汽车操作系统
- mysql - 如何创建分区mysql 8