现在这花了我一些时间来弄清楚,所以我会自行回答。我想在视图上为Django中的一个特定页面禁用浏览器缓存。如果视图是一个函数,则有一些信息,而如果它是一个类,则没有信息。我不想使用中间件,因为只有一个特定的视图我不想被缓存。
[有装饰器可以执行此操作,例如cache_control
中的never_cache
和django.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