假设某人正在编辑HTML表单,并且他们的会话超时,那么如何让Django重新验证该个人而不会丢失用户输入表单的内容?
代码片段Django Snippets: Require login across entire site建议如何进行站点范围的身份验证,但我预计它会丢失字符串的GET组件(因为request.path不包含它),并且肯定会丢失POST数据.
如何在那些不方便的超时中保留POST和GET.我发现精巧的网站倾向于智能地处理这个问题,我希望能够在Django中做到这一点(就像其他人一样,我想象!).
我们将不胜感激.谢谢.
解决方法:
我有两个建议.
重定向/中间件
由于您已经在使用中间件来处理登录要求,因此您可以修改此中间件.或者,可能创建另一个在登录中间件之后调用的中间件类.这些想法交织在一起,因此修改现有的想法可能更有意义.
>如果未登录,请捕获中间件中的GET和POST数据,并将其存储在会话中
>如果用户已通过身份验证,请检查#1中设置的值.如果存在,请修改request.GET和request.POST以反映它,并删除会话数据.
我认为这应该干净利落,许多人会发现它很有用.它在djangosnippets.org上是一个很棒的帖子.
Ajax技术
如果您已经完成了表单处理,则这不太实用,但可以创建更好的用户体验.如果您异步POST,您的Javascript处理程序可以识别“需要登录”的响应代码,然后显示一个请求登录的弹出对话框.完成后,用户可以重新提交表单.