Fighting client-side caching in Django

前端 未结 7 935
傲寒
傲寒 2020-11-27 13:18

I\'m using the render_to_response shortcut and don\'t want to craft a specific Response object to add additional headers to prevent client-side caching.

I\'d like to

7条回答
  •  夕颜
    夕颜 (楼主)
    2020-11-27 14:09

    This approach (slight modification of L. De Leo's solution) with a custom middleware has worked well for me as a site wide solution:

    from django.utils.cache import add_never_cache_headers
    
    class DisableClientSideCachingMiddleware(object):
        def process_response(self, request, response):
            add_never_cache_headers(response)
            return response
    

    This makes use of add_never_cache_headers.


    If you want to combine this with UpdateCacheMiddleware and FetchFromCacheMiddleware, to enable server-side caching while disabling client-side caching, you need to add DisableClientSideCachingMiddleware before everything else, like this:

    MIDDLEWARE_CLASSES = (
        'custom.middleware.DisableClientSideCachingMiddleware',
        'django.middleware.cache.UpdateCacheMiddleware',
        # ... all other middleware ...
        'django.middleware.cache.FetchFromCacheMiddleware',
    )
    

提交回复
热议问题