Django全站缓存 - 登出时密码保护页面的问题
2 个回答
1
在网站的一个需要密码保护的部分,你是否在获取数据之前检查用户是注册用户还是匿名用户(也许还会从缓存中获取数据)?
你应该这样做。Django可以帮助你,通过一个叫做“登录必需”的装饰器,你可以把它放在视图上。看看这个链接:
http://docs.djangoproject.com/en/dev/topics/auth/#the-login-required-decorator
7
我遇到过类似的问题。标准的Django做法是对已登录的用户禁用缓存。
#settings.py
CACHE_MIDDLEWARE_ANONYMOUS_ONLY=True
如果不同的用户看到不同的页面(比如:页面上有他们的用户名),那这样做是没问题的,因为你不能给他们提供同一个版本的页面。
但是如果页面只有两个版本:一个是给已登录用户的,另一个是给其他用户的,那完全禁用已登录用户的缓存就不太合适了。我写了一个应用,它可以在这种情况下帮助你更好地调整缓存。
更新。
顺便提一下:你提到当你点击“刷新”时,能正确获取到页面的版本。这说明问题出在客户端的缓存(比如:过期头或E-tag),而不是服务器的缓存。
为了防止客户端缓存(如果你有多个版本的页面在同一个网址下,你需要这样做),可以使用@cache_control(must_revalidate=True)
这个装饰器。