在烧瓶中重定向时发出POST请求

时间:2013-03-18 09:41:12

标签: python redirect flask

我正在使用烧瓶。 我处于这样一种情况,我需要将一个post请求重定向到另一个url,保留请求方法,即“POST”方法。当我将“GET”请求重定向到另一个接受“GET”请求方法的网址时没问题。 以下是我正在尝试使用的示例代码..

@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请求。

1 个答案:

答案 0 :(得分:83)

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)