在Flask中重定向时发送POST请求
我正在使用Flask框架。现在我遇到一个情况,需要把一个POST请求重定向到另一个网址,同时保持请求的方法为“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”这个网址发起一个“POST”请求,而这个请求内部也会对“/operation”这个网址发起一个“POST”请求。如果我把代码修改成这样,
@app.route('/operation',methods=['GET'])
def operation():
return "My Response"
代码在处理“GET”请求时运行得很好。但我也想能够处理“POST”请求。
1 个回答
143
在Flask
中,redirect
这个函数默认会给客户端发送一个302状态码。根据维基百科上的说法:
很多网页浏览器在处理这个状态码时,做法不符合标准,导致新的请求类型变成了GET,而不管原来请求用的是什么类型(比如POST)。因此,HTTP/1.1(RFC 2616)新增了303和307这两个状态码,以区分这两种行为,其中303要求将请求类型改为GET,而307则保持原来的请求类型不变。
所以,发送307状态码而不是302,应该会告诉浏览器保持使用的HTTP方法,这样就能得到你想要的效果。你调用redirect
的代码应该像这样:
flask.redirect(flask.url_for('operation'), code=307)