Google App Engine 自我重定向() POST 方法

5 投票
3 回答
5156 浏览
提问于 2025-04-16 03:28

在GAE(Python)中,使用webApp框架时,调用self.redirect('some_url')会通过GET方法把用户重定向到那个网址。那有没有办法通过POST方法重定向,并且带上一些参数呢?

如果可以的话,怎么做呢?

谢谢!

3 个回答

-1

看起来这里有个类似的问题: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)
0

可以传递参数。这里有个例子:

假设你有一个主页面,你想要发送数据到 '/success' 页面。通常,你可能会这样做:

self.redirect('/success')

但是如果你想从主页面传递一些参数到 /success 页面,比如说 username,你可以把代码改成这样:

self.redirect('/success?username=' + username)

这样一来,你就成功地把 username 的值放进了网址里。在 /success 页面,你可以用下面的代码来读取和存储这个值:

username = self.request.get('username')

最后,你可以用这段简单的代码在 /success 页面上显示你喜欢的信息:

self.response.out.write('你成功了,' + username + '!')

不过,当然,这并不是传递密码的安全方式。希望这对你有帮助。

7

这件事之所以不可能,是因为大多数客户端处理重定向的方式是这样的:

不过,大部分现有的用户代理(也就是浏览器等)把302状态码当成303状态码来处理,无论你最开始用什么方法发的请求,它们都会对“位置”字段的值执行一个GET请求。

所以,你要么找个变通的方法(比如直接在请求处理器中调用post()方法),要么就放弃这个想法。

[1] http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.2

撰写回答