我正在使用烧瓶。 我处于这样一种情况,我需要将一个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请求。
答案 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)