如何在 Django 视图 class 中设置缓存控制 headers (no-cache)

How to set cache control headers in a Django view class (no-cache)

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

有装饰器可以做到这一点,例如cache_controlnever_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

看这里https://docs.djangoproject.com/en/3.0/topics/cache/#controlling-cache-using-other-headers

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

中的函数
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

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

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