Google App Engine 自我重定向() POST 方法
在GAE(Python)中,使用webApp框架时,调用self.redirect('some_url')会通过GET方法把用户重定向到那个网址。那有没有办法通过POST方法重定向,并且带上一些参数呢?
如果可以的话,怎么做呢?
谢谢!
3 个回答
看起来这里有个类似的问题:Google App Engine 自我重定向 POST 请求
那个问题的回答建议使用 urlfetch.fetch() 来进行 POST 请求。
import urllib form_fields = { "first_name": "Albert", "last_name": "Johnson", "email_address": "Albert.Johnson@example.com" } form_data = urllib.urlencode(form_fields) headers = {'Content-Type': 'application/x-www-form-urlencoded'} result = urlfetch.fetch(url=url, payload=form_data, method=urlfetch.POST, headers=headers)
你可以传递参数。这里有个例子:
假设你有一个主页面,你想要发送数据到 '/success' 页面。通常,你可能会这样做:
self.redirect('/success')
但是如果你想从主页面传递一些参数到 /success
页面,比如说 username
,你可以把代码改成这样:
self.redirect('/success?username=' + username)
这样一来,你就成功地把 username
的值放进了网址里。在 /success
页面,你可以用下面的代码来读取和存储这个值:
username = self.request.get('username')
最后,你可以用这段简单的代码在 /success
页面上显示你喜欢的信息:
self.response.out.write('你成功了,' + username + '!')
不过,当然,这并不是传递密码的安全方式。希望这对你有帮助。
这件事之所以不可能,是因为大多数客户端处理重定向的方式是这样的:
不过,大部分现有的用户代理(也就是浏览器等)把302状态码当成303状态码来处理,无论你最开始用什么方法发的请求,它们都会对“位置”字段的值执行一个GET请求。
所以,你要么找个变通的方法(比如直接在请求处理器中调用post()方法),要么就放弃这个想法。
[1] http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.2