【问题标题】:Django view based cache with authed users具有经过身份验证的用户的基于 Django 视图的缓存
【发布时间】:2012-05-08 19:57:18
【问题描述】:

所以我在 django 中使用基于视图的缓存,因为我有一些并不真正适合缓存的视图和其他真正适合的视图。但是,在我缓存的其中一些视图中,不同用户的输出会有所不同。有没有办法为不同的用户分开基于视图的缓存? @vary_on_cookie 装饰器看起来正是我需要的,但它似乎不适用于基于视图的缓存?

目前我的观点是:

@vary_on_cookie
@cache_page(60 * 5)
def view(request):

如果您以匿名身份登录,您可以查看已登录用户的缓存内容。

有什么想法吗?我知道我可能会使用低级缓存来解决这类问题,但如果没有更简单的 django 方法来解决这个问题,我会感到很惊讶,这似乎是一个常见问题。

谢谢

汤姆

【问题讨论】:

    标签: python django caching


    【解决方案1】:

    您可以简单地将基于客户端的缓存与cache_control 结合使用。喜欢:

    @cache_control(max_age=60 * 5)
    def view(request):
    

    【讨论】:

    • 所以如果用户之前访问过它,它只会缓存一个页面?因此,如果两个都没有经过身份验证的用户都尝试访问视图,它不会通过缓存吗?因为他们都将分别处理视图?
    • 无论如何要公开缓存所有匿名用户并私下缓存经过身份验证的用户?看起来 patch_cache_control(response, public=True) 可能是我需要的,我要尝试一下。
    【解决方案2】:

    有一个使用 Django 缓存框架的snippet here。我想你可以自己修改它。第 38 行:

    key = make_cache_key(request.get_full_path(), getattr(request, 'supports_html5', None))
    

    你可以改成

    key = make_cache_key(request.user[.id], request.get_full_path(), getattr(request, 'supports_html5', None))
    

    让用户拥有不同的页面键。

    【讨论】:

      猜你喜欢
      • 2012-07-24
      • 2020-11-04
      • 2015-08-03
      • 2015-06-21
      • 2016-11-30
      • 1970-01-01
      • 2019-08-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多