Flask POST带有尾随斜杠。

10 浏览
0 Comments

Flask POST带有尾随斜杠。

文档说明了定义路由的首选方式是包含斜杠:

@app.route('/foo/', methods=['GET'])
def get_foo():
    pass

这样,客户端可以使用GET /fooGET /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在非尾斜杠和尾斜杠上都起作用?

0