Django缓存和用户名

时间:2017-04-25 10:10:04

标签: django caching

所以我有这个站点(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",
    }
}

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

我的问题是:你怎么处理这个?我是否需要对某些类型的基于用户的缓存,或者有更好的方法来避免这种情况吗?我的意思是,一定有其他人遇到过同样的问题吗?

1 个答案:

答案 0 :(得分:1)

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

这里需要的是使用fragment caching并根据用户特定内容和不具备内容的方式构建缓存密钥。