::编辑::
@cache_control(no_cache=True, Must_revalidate=True, no_store=True)
FTW!!!!!!
缓存控制:无缓存、无存储、必须重新验证就可以了。我花了一些时间去找几个 IRC channel 并环顾四周,但最终我成功了。
::编辑::
我有一个 View ,我在其中设置了@login_required,并且它在很大程度上是安全的,但是如果您查看了该 View ,然后注销并只需点击浏览器中的后退按钮,您就可以使用以下命令再次查看内容被要求登录。不过,如果您刷新页面,服务器将重定向您。
我的暂停是一个缓存问题,也许我需要告诉 chrome 不要将其存储在历史记录中。
例如,如果您查看发票,然后注销,您可以通过在后台历史记录中选择该页面来再次查看发票。
我已经在 Firefox 上尝试过这个问题,没有问题。 firefox 要求您登录后端,因此这一定是浏览器问题。
最佳答案
你是对的,这是缓存问题。
您可以使用 cache_control
装饰器强制在 View 上不缓存[1]:
from django.views.decorators.cache import cache_control
@cache_control(no_cache=True, must_revalidate=True, no_store=True)
def func()
#some code
return
您还应该编写自己的装饰器来替换 @login_required
,这样您就不需要在每个页面上都使用两者。
关于当用户通过在 Chrome 上返回历史记录注销时,Django @login_required View 仍然显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9625046/