Django缓存和用户名



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

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

我的问题是:您如何处理?我是否需要一些基于用户的缓存,或者有更好的方法可以避免这种情况?我的意思是,肯定有其他人遇到同样的问题?

给定症状,我假设您正在使用全局站点缓存或页面缓存。在这两种情况下,它确实都会将整个响应保留在缓存中,而不必担心当前用户或其他用户。

您需要的是使用片段缓存并根据特定于用户特定的和不是什么而构建缓存键。

最新更新