如何在 Django 视图类中设置缓存控制标头(无缓存)

Chr*_*ris 4 django caching django-views browser-cache

现在这花了我一些时间来弄清楚,所以我会自我回答。我想在 Django 视图上禁用一个特定页面的浏览器缓存。如果视图是一个函数,则有一些如何执行此操作的信息,但如果它是一个类,则没有。我不想使用中间件,因为只有一个我不想缓存的特定视图。

Chr*_*ris 7

有装饰器可以做到这一点,cache_control例如never_cachedjango.views.decorators.cache

对于一个函数,你只需像这样装饰该函数

@never_cache
def my_view1(request):
    # your view code

@cache_control(max_age=3600)
def my_view2(request):
    # your view code
Run Code Online (Sandbox Code Playgroud)

请参阅此处https://docs.djangoproject.com/en/3.0/topics/cache/#controlling-cache-using-other-headers

现在,如果您的视图是一个类,您必须应用另一种方法,我已经知道使用身份验证,但没有建立连接。类还有另一个装饰器来装饰类内的函数

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

decorators = [never_cache,]

@method_decorator(decorators, name='dispatch')
class MyUncachedView(FormView):
    # your view code
Run Code Online (Sandbox Code Playgroud)

dispatch这将使用上面定义的列表中指定的装饰器来装饰表单方法decorators。顺便说一句,您不必实现调度方法。

还有其他变体可以做到这一点,请参见此处:https://docs.djangoproject.com/en/3.0/topics/class-based-views/intro/#decorating-the-class