Flask POST带有尾随斜杠。
Flask POST带有尾随斜杠。
文档说明了定义路由的首选方式是包含斜杠:
@app.route('/foo/', methods=['GET']) def get_foo(): pass
这样,客户端可以使用GET /foo
或GET /foo/
获得相同的结果。
然而,POST方法的行为不同。
from flask import Flask
app = Flask(__name__)
@app.route('/foo/', methods=['POST'])
def post_foo():
return "bar"
app.run(port=5000)
在这里,如果你POST /foo
,如果你没有处于调试模式,它会失败并显示method not allowed
,如果你处于调试模式,则会显示以下提示:
请求发送到此URL(http://localhost:5000/foo),但路由系统自动发出了重定向到"http://localhost:5000/foo/"";此URL定义了一个带有尾斜杠的URL,因此如果没有尾斜杠访问它,Flask将自动重定向到带有尾斜杠的URL。请确保直接将您的POST请求发送到此URL,因为我们无法可靠地或无需用户交互地使浏览器或HTTP客户端重定向带有表单数据的请求。
此外,似乎您甚至不能这样做:
@app.route('/foo', methods=['POST']) @app.route('/foo/', methods=['POST']) def post_foo(): return "bar"
或者这样:
@app.route('/foo', methods=['POST'])
def post_foo_no_slash():
return redirect(url_for('post_foo'), code=302)
@app.route('/foo/', methods=['POST'])
def post_foo():
return "bar"
是否有办法使POST
在非尾斜杠和尾斜杠上都起作用?