gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 02:49:03 25 4
gpt4 key购买 nike

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

我找到了一个选项:

CACHE_MIDDLEWARE_ANONYMOUS_ONLY

并将其设置为 True。

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

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

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

最佳答案

看来你需要的是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了解更多详情。

您也可以尝试在自定义中间件中执行此操作,这样您就不必在每个 View 上都添加这些装饰器。这可以像这样完成:

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借来了代码.现在您只需添加中间件,而不必担心其他任何事情。

关于python - Django 。仅为匿名提供缓存内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9977807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com