Django Rest框架缓存标头

mcg*_*f14 8 python django caching cdn django-rest-framework

我正在尝试在CDN中缓存一些我的DRF api调用.我需要以下标头Cache-Control:public,max-age = XXXX

当你使用传统的django模板时,这很简单,只需添加@cache_page()@ cache_control(public = True)装饰器,但对于DRF,我找不到类似的东西.在mem缓存中有相当多的内容,我已经有了,但我真的想让CDN将所有的负载从我的服务器上取下来,我想缓存生成的查询集.

我也使用modelViewSets,如果这对任何事情都很重要:

class EventViewSet(viewsets.ModelViewSet):

    serializer_class = EventViewSet
    permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
    pagination_class = pagination.LimitOffsetPagination
    filter_backends = (filters.DjangoFilterBackend, filters.SearchFilter,)
    filter_class = EventFilter
    search_fields = ('name','city','state')

    def get_queryset(self):
Run Code Online (Sandbox Code Playgroud)

小智 5

@method_decorator 可以应用于视图类。当提供参数时name,它将将该命名方法包装在该类的实例中。你想要的是这样的东西:

from django.utils.decorators import method_decorator
from django.views.decorators.cache import cache_control

@method_decorator(cache_control(public=True, max_age=xxxx), name='dispatch')
class EventViewSet(viewsets.ModelViewSet):
    ...
Run Code Online (Sandbox Code Playgroud)