qra*_*raq 4 python django caching
我正在使用django缓存(使用中间件的每站点缓存),并且只想向匿名用户显示缓存页面.
我找到了一个选项:
CACHE_MIDDLEWARE_ANONYMOUS_ONLY
并将其设置为True.
例如,为登录用户生成的页面不会保存到缓存中,但为匿名生成的页面将保存到缓存并发送给已记录的用户.
如何强制django不向登录用户提供缓存内容?我使用的每一页上的用户登录信息(例如:"嗨用户名"),当匿名用户请求它的缓存,因为这已登录的用户得到了一个页面:"嗨!匿名"
对不起,我的英语不好.约翰.
看来你需要的是vary
装饰者.例如,您可以使用以下代码:
from django.views.decorators.vary import vary_on_headers
@vary_on_headers('Cookie')
def my_view(request):
# do some stuff
Run Code Online (Sandbox Code Playgroud)
或者等价
from django.views.decorators.vary import vary_on_cookie
@vary_on_cookie
def my_view(request):
# do some stuff
Run Code Online (Sandbox Code Playgroud)
除非更改cookie(例如用户登录时会发生这种情况),否则将缓存响应.还有其他有趣的事情你可以做vary
.有关更多详细信息,请参阅此文章 或文档.
您也可以尝试在自定义中间件中执行此操作,这样您就不必在每个视图上添加这些装饰器.这可以这样做:
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
Run Code Online (Sandbox Code Playgroud)
我从这里借了代码.现在您只需添加中间件,您不必担心其他任何问题.