如何为经过身份验证的用户禁用缓存?

时间:2018-06-01 09:22:39

标签: django authentication caching

除了显示用户用户名的导航栏外,我的主页对每个人都一样。

我最近使用以下方法将缓存应用到我的整个网站:

MIDDLEWARE += [
    'django.middleware.cache.UpdateCacheMiddleware',
    'django.middleware.cache.FetchFromCacheMiddleware',
]

# CACHING
CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
        'LOCATION': 'C:/Site/_cache',
    }
}

CACHE_MIDDLEWARE_SECONDS = 21600 # 6 hours

不幸的是,该网站现在有时会缓存包含用户名的页面版本,这意味着该网站将为某些用户显示其他人的用户名。不理想。

处理此问题的最佳方法是什么?我可以从缓存中排除模板的这部分吗? 或者我可以说缓存不用于经过身份验证的用户吗?

1 个答案:

答案 0 :(得分:1)

是的,您可以使用template fragment caching使用不同的密钥缓存部分模板。例如,要为每个经过身份验证的用户缓存单独的导航栏1小时,请按以下方式构建base.html

{% load cache %}
...
{% cache 3600 navbar request.user.username %}
    Your username is {{ user.username }}
{% endcache %}
...
{% cache 3600 body %}
   ... the rest of the template which is common for all users ...
{% endcache %}