【问题标题】:How to set cache control headers in a Django view class (no-cache)如何在 Django 视图类中设置缓存控制标头(无缓存)
【发布时间】:2020-09-24 13:33:15
【问题描述】:

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

【问题讨论】:

    标签: django caching django-views browser-cache


    【解决方案1】:

    有装饰器可以做到这一点,例如django.views.decorators.cache中的cache_controlnever_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

    【讨论】:

      猜你喜欢
      • 2019-01-14
      • 1970-01-01
      • 2011-10-01
      • 2018-04-29
      • 1970-01-01
      • 2018-06-19
      • 2013-04-01
      • 1970-01-01
      • 2012-02-19
      相关资源
      最近更新 更多