当前位置:  开发笔记 > 编程语言 > 正文

Django:如何重定向到表单来源的页面

如何解决《Django:如何重定向到表单来源的页面》经验,为你挑选了2个好方法。

在我的Django应用程序中,我有多个页面显示一个链接,该链接加载显示表单的新页面.提交表单时,重定向到访问此表单的原始页面的最简洁方法是什么?

始发页面 - >表单页面 - >始发页面

使用下一个变量似乎是unellegant,因为我必须在原始页面链接上将其设置为GET变量,然后在表单中将其设置为隐藏的POST变量?任何其他想法将不胜感激.



1> Wolph..:

有几种选择,都有利弊和利益.

    通过原始页面传递i POST/GET

    将原始页面存储在会话中(显然不适用于多个选项卡)

    将原始页面存储在cookie中(也不适用于多个选项卡)

    如果它是单个页面,则重定向到引荐来源.在你的情况下似乎不可能

我个人认为使用下一个参数是你最好的选择,但要记得保护它(只有相对网址,没有javascript的东西,csrf框架)所以你不会有任何安全问题.



2> Tomasz Zieli..:

WoLpH已经列出了合理的可能性,并指出(可能)最好的解决方案.所以我只会详细说明.

如果你需要处理这个:原始页面 - >表单页面 - >原始页面然后在现实中它将看起来像这样:原始页面 - [GET] - >表单页面 - [POST/submision] - >表单页面(2) - [GET /重定向] - >原始页面.这意味着,表单页面(2)阶段必须以某种方式知道重定向用户的位置,这里唯一合理的选择是使用会话(具有WoLpH提到的缺点)或者在POST中传递它,可能作为隐藏字段.

关于第一个GET并传递next URL表单页面,你可以在查询字符串中传递它(你发现它不优雅),或者你可以从HTTP_REFERER标题中提取它 - 这对像我这样的更偏执的用户不起作用.

你也可以在这里做一个混合的东西,即当且仅当用户没有在她的浏览器中关闭HTTP_REFERER 时才添加next=到查询字符串中.然后大多数用户不会在URL中看到任何丑陋的东西.

请注意,所有这些都可以自动化,即您可以将链接编写为:


inject_next_url注入时:next={{ context['request'].get_full_path() }}仅当HTTP_REFERER不存在时.

然后,在表单处理程序中,您可以使用一些泛型extract_next_url(request)函数,它next URL在以下其中一个中查找:查询字符串,HTTP_REFERER,request.POST或更多构造 - 在以下之一:HTTP_REFERER,request.REQUEST

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有