Django的.仅为匿名提供缓存内容

qra*_*raq 4 python django caching

我正在使用django缓存(使用中间件的每站点缓存),并且只想向匿名用户显示缓存页面.

我找到了一个选项:

CACHE_MIDDLEWARE_ANONYMOUS_ONLY

并将其设置为True.

例如,为登录用户生成的页面不会保存到缓存中,但为匿名生成的页面将保存到缓存并发送给已记录的用户.

如何强制django不向登录用户提供缓存内容?我使用的每一页上的用户登录信息(例如:"嗨用户名"),当匿名用户请求它的缓存,因为这已登录的用户得到了一个页面:"嗨!匿名"

对不起,我的英语不好.约翰.

fre*_*ish 5

看来你需要的是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)

我从这里借了代码.现在您只需添加中间件,您不必担心其他任何问题.