【发布时间】:2020-09-24 13:33:15
【问题描述】:
现在我花了一些时间才弄清楚,所以我会自己回答。 我想在视图上禁用 Django 中一个特定页面的浏览器缓存。如果视图是一个函数,则有一些信息如何做到这一点,但如果它是一个类,则没有。 我不想使用中间件,因为我不想缓存一个特定的视图。
【问题讨论】:
标签: django caching django-views browser-cache
现在我花了一些时间才弄清楚,所以我会自己回答。 我想在视图上禁用 Django 中一个特定页面的浏览器缓存。如果视图是一个函数,则有一些信息如何做到这一点,但如果它是一个类,则没有。 我不想使用中间件,因为我不想缓存一个特定的视图。
【问题讨论】:
标签: django caching django-views browser-cache
有装饰器可以做到这一点,例如django.views.decorators.cache中的cache_control和never_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
这将使用上面定义的decorators 列表中指定的装饰器来装饰表单方法dispatch。顺便说一句,您不必实现调度方法。
还有其他变体可以做到这一点,请参见此处:https://docs.djangoproject.com/en/3.0/topics/class-based-views/intro/#decorating-the-class
【讨论】: