【发布时间】:2015-04-09 18:36:12
【问题描述】:
我有一个应用程序强制执行严格的页面顺序。如果用户单击“后退”按钮,应用程序会检测到无序页面访问并将用户返回到开始。
我想让这更友好一点,通过将用户重定向回正确的页面并显示一个弹出的 javascript 警告框,告诉他们不要使用后退按钮。
我已经在使用一个函数来进行大量的有效性检查,如果请求正常则返回 None ,如果请求无效则返回 HttpResponseRedirect 到另一个页面(通常是错误页面或登录页面)。我所有的视图顶部都有这段代码:
response = validate(request)
if response:
return response
所以,因为我已经有了这个 validate() 函数,所以添加这个额外的代码来检测乱序访问似乎是个好地方。
但是,由于乱序检测标志必须在重定向中存活,我不能只设置一个视图变量;我必须在会话数据中设置标志。但是我当然不希望在会话数据中永久设置标志;我想在处理完模板后从会话数据中删除标志。
我可以在我的所有渲染调用中添加这样的代码:
back_button = request.session.get('back_button', False)
response = render(request, 'foo.html', { 'back_button': back_button } )
if back_button:
del request.session['back_button']
return response
但这似乎有点混乱。有没有办法在处理模板后自动删除会话密钥?也许是一个中间件?
顺便说一句,我使用的是基于函数的视图,而不是基于类的视图。
【问题讨论】: