62

我正在使用烧瓶。我处于需要将发布请求重定向到另一个保留请求方法(即“POST”方法)的 url 的情况。当我将“GET”请求重定向到另一个接受“GET”请求方法的 url 时很好。这是我在上面尝试的示例代码..

@app.route('/start',methods=['POST'])
def start():
    flask.redirect(flask.url_for('operation'))

@app.route('/operation',methods=['POST'])
def operation():
    return "My Response"

我想向“/start” url 发出“POST”请求,该请求在内部也向“/operation”url 发出“POST”请求。如果我像这样修改代码,

@app.route('/operation',methods=['GET'])
def operation():
    return "My Response"

代码适用于“GET”请求。但我也希望能够发出 POST 请求。

4

1 回答 1

130

中提供的redirect功能Flask默认向客户端发送 302 状态码,正如Wikipedia上所提到的:

许多网络浏览器以违反此标准的方式实现此代码,将新请求的请求类型更改为 GET,而不管原始请求中使用的类型(例如 POST)。[1] 出于这个原因,HTTP/1.1 (RFC 2616) 添加了新的状态代码 303 和 307 以消除两种行为之间的歧义,其中 303 要求将请求类型更改为 GET,而 307 则保留最初发送的请求类型。

因此,发送 307 状态码而不是 302 应该告诉浏览器保留使用的 HTTP 方法,从而获得您期望的行为。您的呼叫redirect将如下所示:

flask.redirect(flask.url_for('operation'), code=307)
于 2013-03-18T15:46:32.087 回答