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

时间:2012-04-02 13:56:21

标签: python django caching

我正在使用django缓存(使用中间件进行每站点缓存),并希望仅向匿名用户显示缓存页面。

我找到了一个选项:

  

CACHE_MIDDLEWARE_ANONYMOUS_ONLY

并将其设为True。

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

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

抱歉我的英语不好。 约翰。

1 个答案:

答案 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 articlethe 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借用了代码。现在你只添加中间件,你不必担心其他任何事情。