Flask重定向(相同的路由,不同的HTTP方法)最终在302循环中结束



我正试图从PUT重定向到GET请求,但由于request.method似乎一直设置为PUT,我最终进入了302循环。我已尝试将_method='GET'添加到url_for函数中。

@app.route('/test', methods=['GET', 'PUT'])
def test_route():
if request.method == 'PUT':
...
return redirect(url_for('app.test_route'))
else:
return render_template('test.html')

结果是:

[2020-02-24 04:44:06,093] INFO in _internal: 127.0.0.1 - - [24/Feb/2020 04:44:06] "PUT /test HTTP/1.1" 302 -
[2020-02-24 04:44:06,207] INFO in _internal: 127.0.0.1 - - [24/Feb/2020 04:44:06] "PUT /test HTTP/1.1" 302 -
[2020-02-24 04:44:06,331] INFO in _internal: 127.0.0.1 - - [24/Feb/2020 04:44:06] "PUT /test HTTP/1.1" 302 -
[2020-02-24 04:44:06,468] INFO in _internal: 127.0.0.1 - - [24/Feb/2020 04:44:06] "PUT /test HTTP/1.1" 302 -
[2020-02-24 04:44:06,567] INFO in _internal: 127.0.0.1 - - [24/Feb/2020 04:44:06] "PUT /test HTTP/1.1" 302 -
[2020-02-24 04:44:06,687] INFO in _internal: 127.0.0.1 - - [24/Feb/2020 04:44:06] "PUT /test HTTP/1.1" 302 -

我在StackOverflow中查找过类似的问题,但没有找到任何有效的解决方案。这似乎是一个很容易解决的问题,但它花了我比我想的更多的时间

我在https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html.

303参见其他

对请求的响应可以在不同的URI下找到,并且应该使用该资源上的GET方法进行检索。这种方法存在的主要目的是允许POST激活脚本的输出将用户代理重定向到所选资源。新URI不是替换原始请求资源的引用。303响应不能缓存,但对第二个(重定向的(请求可能是可缓存的。

不同的URI应该由回答除非请求方法是HEAD,否则响应应该包含一个简短的超文本注释,其中包含指向新URI。

话虽如此,更改302的默认代码就成功了:

redirect(url_for('app.test_route'), code=303)

最新更新