如何在 Django 视图 class 中设置缓存控制 headers (no-cache)
How to set cache control headers in a Django view class (no-cache)
现在我花了一些时间才弄清楚,所以我会 self-answer 它。
我想在视图上的 Django 中禁用一个特定页面的浏览器缓存。如果视图是函数,则有一些信息如何执行此操作,但如果它是 class,则不会。
我不想使用中间件,因为只有一个特定的视图我不想被缓存。
有装饰器可以做到这一点,例如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
现在,如果您的视图是 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
现在我花了一些时间才弄清楚,所以我会 self-answer 它。 我想在视图上的 Django 中禁用一个特定页面的浏览器缓存。如果视图是函数,则有一些信息如何执行此操作,但如果它是 class,则不会。 我不想使用中间件,因为只有一个特定的视图我不想被缓存。
有装饰器可以做到这一点,例如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
现在,如果您的视图是 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