如何在Django站点上启用身份验证,并透明地保留任何POST或GET数据?

假设某人正在编辑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处理程序可以识别“需要登录”的响应代码,然后显示一个请求登录的弹出对话框.完成后,用户可以重新提交表单.

上一篇:python – 获取上传文件内容到wsgi


下一篇:python – 决定使用WSGI或Django获取新的Web应用程序