【问题标题】:Django cache and usernamesDjango 缓存和用户名
【发布时间】:2018-05-16 01:01:07
【问题描述】:

所以我有这个网站(Django 1.8),它有一个主模板,其中显示登录用户的姓名,所以模板包含

{% if user.is_active %}
  {% trans 'Welcome,' %}{% filter force_escape %}{% firstof user.first_name user.username %}{% endfilter %}
{% endif %}

因此请注意,它仅在用户处于活动状态时显示。我现在在使用 redis 作为缓存存储的地方设置缓存:

CACHES = {
    'default': {
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': 'redis://redis:6379/1',
        'OPTIONS': {
            'CLIENT_CLASS': 'django_redis.client.DefaultClient',
        },
        "KEY_PREFIX": "mycache",
    }
}

缓存工作正常,但我注意到该用户名也缓存在前端。这意味着当用户注销时,他的名字仍然可见,就像他已经登录一样,更糟糕的是,有时它会显示另一个刚刚登录并触发缓存的用户的名字。这当然是合乎逻辑的,因为我认为缓存框架会缓存整个页面。

我的问题是:你如何处理这个问题?我是否需要某种基于用户的缓存,还是有更好的方法来避免这种情况?我的意思是,一定有其他人遇到过同样的问题?

【问题讨论】:

    标签: django caching


    【解决方案1】:

    鉴于我假设您正在使用global site cachepage cache 的症状。在这两种情况下,它确实会将整个响应保存在缓存中,而不用担心当前用户或其他任何东西。

    您需要在这里使用fragment caching 并根据用户特定和非特定内容构建缓存键。

    【讨论】:

    • 啊,这正是我所需要的。我不知何故错过了。由于声誉不足,无法投票,但认为已完成。我会对此进行测试,看看它是否有效。
    猜你喜欢
    • 2014-02-08
    • 2014-10-13
    • 1970-01-01
    • 1970-01-01
    • 2015-11-04
    • 1970-01-01
    • 2016-06-09
    • 2013-12-07
    • 2014-11-07
    相关资源
    最近更新 更多