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

问题描述 投票:0回答:1

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

django caching django-views browser-cache
1个回答
0
投票

[有装饰器可以执行此操作,例如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

请参见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

这将使用在dispatch列表中指定的装饰器(上面定义的)装饰表单方法decorators。不必执行调度方法,顺便说一句。

还有其他变体,请参见:https://docs.djangoproject.com/en/3.0/topics/class-based-views/intro/#decorating-the-class

© www.soinside.com 2019 - 2024. All rights reserved.