Django Rest框架缓存头

2024-10-03 15:26:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在CDN中缓存一些drfapi调用。我需要以下标题缓存-控制:公共,最大年龄=XXXX

当使用传统的django模板时,这非常简单,只需添加@cache_page()@cache_control(public=True)修饰符,但是对于DRF,我找不到类似的东西。内存缓存有很多,我已经准备好了,但是我真的很想让CDN一起减轻服务器的负载,我想缓存得到的queryset。在

我还使用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):

Tags: django模板标题cachepaginationcdn传统filter
3条回答

你试过:

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

class EventViewSet(viewsets.ModelViewSet):

    @method_decorator(cache_control(private=False, max_age=xxxx)
    def dispatch(self, request, *args, **kwargs):
        return super(EventViewSet, self).dispatch(request, *args, **kwargs)

{{1}。当提供一个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):
    ...

更新:我从未在Django或Django Rest框架内解决过这个问题。最后我在nginx conf文件中设置了头文件。在

相关问题 更多 >