我的表单通过 GET
发送年龄参数,只需使用以下代码即可正常工作:
@app.route("/foo")
def foo():
age = request.args['age']
我没有去理会
@app.route('/foo', methods=['GET', 'POST'])
有所谓的重要性吗?
从技术上讲,这并不重要,因为它能够工作。然而通常情况下,您希望有几个执行不同任务的函数,例如:POST到/foo表示添加元素,GET到/foo表示检索元素(们),DELETE到/foo表示删除元素。
app.route()
指定methods
参数,那么默认只接受GET
和HEAD
请求(*)。POST
)时,才需要明确设置methods
,否则Flask会响应405 Method Not Allowed HTTP response code,并且您的路由函数将不会被调用。GET
和POST
请求,但是您忘记在@route()
中添加methods=['GET', 'POST']
,那么您就会遇到错误,因为POST
请求会导致405响应,而不是您的路由处理请求。methods=['GET', 'POST']
而是让试图使用 POST 的客户端知道您的路由不处理那种方法。更好的做法是显式地报错,而不是让它悄悄地通过。
GET
的路由时,就会添加HEAD
。在HEAD
请求的情况下,将调用您的路由,并仅向客户端提供标头。Flask会自动为您处理OPTIONS
,在这种情况下不会调用路由。一如既往,答案是:这取决于情况。
如果你没有提供"methods"参数,那么Flask会假设HTTP方法是GET(也接受HEAD)。只要这个假设是正确的,你的代码就可以正常工作。
然而,如果你的网页以POST方法(或DELETE等)通信,Flask将失败并抱怨不允许POST(或DELETE等)请求。
想象一下这个要求就像冗余检查一样。Flask本来可以被编写成适应HTTP请求中使用的任何方法。相反,Flask坚持要求您指定方法,以此作为一种沟通形式的信号。这个要求使得Flask实现变得更加简单,但代价是让程序员承担协调客户端-服务器接口的责任。