django 新手,求助一个 request 参数传递的问题

2016-03-21 09:22:46 +08:00
 edutilos
第一次发帖,比较菜,描述可能比较啰嗦,请多包涵

事情是这样的,现在在用 CAS 做一个单点登陆系统

用的是 django 的几个库( django-cas-ng , django-mama-cas , django-python3-ldap , django-ldapdb )

目前是用一个 django 应用做 CAS SERVER ,然后其他的应用对用户进行的所有操作(登陆注册修改信息等)都会跳转到 cas server 进行,然后再跳转回去

然后目前遇到这样一个问题,比如给一个手机注册的用户,绑定邮箱,逻辑如下:
1. 用户访问 app1.com ,点击绑定邮箱
2. 用户名和 app1 的 url 作为参数,跳转到 server.com/bind_mail/?username=XXX&?url=app1.com
3. 然后问题就出在这儿了, cas server 端的 view 函数需要从 request.GET 里得到 username 和 url 参数,然后在表单提交后的, request.POST 里根据对用户进行修改,代码如下:

https://gist.github.com/anonymous/9016d43ecc376e1165e1

然后发现 view 里一开始用 request.GET 取到的参数,到表单提交后(if request.POST 之后)就没有了,用了 deepcopy 也保存不了

然后用了个特别笨的方法,在<input type='submit'>里加了个 name="{{ request.GET.url }}#{{ request.GET.username }}",然后在 request.POST 后是能拿到 url 和 username 了,修改跳转都正常。

然而这种方法,一旦表单验证失败, url 里的关键字参数就会消失,就无法完成修改了

搜索了半天,没有合适的方法,有个很久前的文章( https://timmyomahony.com/blog/djangos-request-updating-with-request-get/)说用 request.REQUEST.get 能得到 old value ,然而试了并没有用,新版 django 文档里也没有相关资料

所以在这里求助,有什么好的解决方案吗?还是我的整个思路就有问题?
3424 次点击
所在节点    Python
7 条回复
virusdefender
2016-03-21 09:36:21 +08:00
到表单提交后(if request.POST 之后)就没有了,用了 deepcopy 也保存不了
--------------

怎么可能会没有了?什么表现让让你认为没有了
edutilos
2016-03-21 09:43:09 +08:00
@virusdefender 取不到值了, print 出来是空的
cloverstd
2016-03-21 09:46:27 +08:00
GET 方法种获取到的 username 和 url 在 render 的时候作为参数参入,写进 input[type=hidden] 里面
wangyongbo
2016-03-21 09:59:29 +08:00
GET server.com/bind_mail/?username=XXX&?url=app1.com
之后的 POST 是不是到 server.com/bind_mail/
你把 form 的 action 改为 '', 应该还能用 request.GET 获取到 username 和 url 。

有个问题是,你这样不做任何验证的话,岂不是 username 随便写,就把别人的邮箱改了?

HTTP 是无状态的。 不同请求要共享数据,要找个地方存,可以放在 cookie 或者 session.
edutilos
2016-03-21 10:12:07 +08:00
@wangyongbo 感谢,改了 action 确实搞定了,而且还发现了新问题
wind3110991
2016-03-21 16:30:29 +08:00
你的 django 是哪个版本的?
edutilos
2016-03-21 20:18:13 +08:00
@wind3110991 1.8 、 1.9

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/265041

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX