我正在使用django缓存(使用中间件进行每站点缓存),并希望仅向匿名用户显示缓存页面。
我找到了一个选项:
CACHE_MIDDLEWARE_ANONYMOUS_ONLY
并将其设为True。
例如,为登录用户生成的页面不会保存到缓存中,但为匿名生成的页面会保存到缓存并发送给已登录的用户。
如何强制django不向登录用户提供缓存内容? 我在每个页面上都使用用户登录信息(例如:“hi UserName”),当匿名用户请求页面时,它被缓存,因为这个登录的用户得到了:“嗨,匿名!”
抱歉我的英语不好。 约翰。
答案 0 :(得分:5)
您需要的是vary
装饰器。例如,您可以使用以下代码:
from django.views.decorators.vary import vary_on_headers
@vary_on_headers('Cookie')
def my_view(request):
# do some stuff
或等效
from django.views.decorators.vary import vary_on_cookie
@vary_on_cookie
def my_view(request):
# do some stuff
除非Cookie更改(例如用户登录时会发生这种情况),否则将缓存响应。您可以使用vary
执行其他有趣的操作。有关详细信息,请参阅this article或the documentation。
您也可以尝试在自定义中间件中执行此操作,这样您就不必在每个视图上添加这些装饰器。这可以这样做:
from django.utils.cache import add_never_cache_headers
class DisableClientSideCachingMiddleware(object):
def process_response(self, request, response):
if request.user.is_authenticated():
add_never_cache_headers(response)
return response
我从here借用了代码。现在你只添加中间件,你不必担心其他任何事情。