Python 德扬戈。仅为匿名用户提供缓存内容

Python 德扬戈。仅为匿名用户提供缓存内容,python,django,caching,Python,Django,Caching,我正在使用django缓存(使用中间件的每个站点缓存),并且只想向匿名用户显示缓存的页面 我找到了一个选择: 缓存\u中间件\u匿名\u 把它变成现实 在这种情况下,为登录用户生成的页面不会保存到缓存中,但为匿名用户生成的页面会保存到缓存中并发送给登录用户 如何强制django不向登录用户提供缓存内容? 我在每个页面上使用用户登录信息(比如:“hi UserName”),当匿名用户请求一个页面时,它会被缓存,因为这个登录的用户会得到:“hi anonymous!” 对不起,我的英语不好。 约翰。

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

我找到了一个选择:

缓存\u中间件\u匿名\u

把它变成现实

在这种情况下,为登录用户生成的页面不会保存到缓存中,但为匿名用户生成的页面会保存到缓存中并发送给登录用户

如何强制django不向登录用户提供缓存内容? 我在每个页面上使用用户登录信息(比如:“hi UserName”),当匿名用户请求一个页面时,它会被缓存,因为这个登录的用户会得到:“hi anonymous!”

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

看来你需要的是不同的装修师。例如,您可以使用以下代码:

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
做其他有趣的事情。有关更多详细信息,请参阅或

您还可以尝试在自定义中间件中执行此操作,这样就不必在每个视图上添加这些装饰器。可以这样做:

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
我从你那里借用了代码。现在,您只需添加中间件,不必担心其他任何事情