我正试图从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)