Python 我是否需要在@app.route()中使用方法=[';GET';,';POST';]?

Python 我是否需要在@app.route()中使用方法=[';GET';,';POST';]?,python,flask,Python,Flask,我的表单通过GET发送年龄参数,它的工作原理如下: @app.route("/foo") def foo(): age = request.args['age'] 我没有打扰你 @app.route('/foo', methods=['GET', 'POST']) @app.route('/foo',方法=['GET','POST']) 这有关系吗?这不重要,因为它会起作用。然而,通常情况下,您希望有几个函数执行不同的操作,例如。POST to/foo表示添加元素,GET to/foo

我的表单通过
GET
发送年龄参数,它的工作原理如下:

@app.route("/foo")
def foo():
  age = request.args['age']
我没有打扰你

@app.route('/foo', methods=['GET', 'POST'])
@app.route('/foo',方法=['GET','POST']

这有关系吗?

这不重要,因为它会起作用。然而,通常情况下,您希望有几个函数执行不同的操作,例如。POST to/foo表示添加元素,GET to/foo表示检索元素,DELETE to/foo表示删除元素

如果未为
app.route()
指定
methods
参数,则默认设置为仅接受
GET
HEAD
请求(*)

如果需要接受其他HTTP方法,如
POST
,则只需显式设置
方法
,否则,当客户端使用未列出的HTTP方法时,Flask将响应,并且根本不调用路由函数

因此,如果您的路由应该同时处理
GET
POST
请求,但是您忘记将
方法=['GET','POST']
添加到
@route()
,那么您就有一个bug,因为
POST
请求会导致405响应,而不是路由处理请求

然而,在您的情况下,您不应该使用
方法=['GET','POST']
,而是让尝试使用POST的客户端知道您的路由无法处理该方法。与其让错误静静地过去,不如明确地说明错误



(*)每当您使用处理
GET
的注册路由时,都会添加
HEAD
,如果是
HEAD
请求,则会调用您的路由,然后只向客户端提供头。Flask会自动为您处理,在这种情况下不会调用路由。

与往常一样,答案是:视情况而定

如果您不提供“methods”参数,那么Flask将假定HTTP方法是GET(并且还接受HEAD)。只要该假设有效,您的代码就可以正常工作

但是,如果您的网页以POST方法(或删除等)进行通信,Flask将失败并抱怨POST(或删除等)请求不被允许


将此要求视为冗余检查。Flask可以编写为适应HTTP请求中使用的任何方法。相反,Flask坚持将该方法指定为表明通信形式是有意的信号。这一要求使Flask实现变得更简单,代价是将协调客户机-服务器接口的责任强加给程序员。

如果您想指定访问路由的特定方法,这很重要这是一种常见的约定吗?POST用于插入操作,GET用于选择操作?根据HTTP方法的标准,我们使用。POST插入一个新对象,选择一个,放置以替换整个现有对象,删除以删除它,修补以部分更新它。我相信补丁是作为REST的一部分引入的,作为一种只更新已编辑属性而不是整个对象的方法。POST用于删除操作,GET用于其他操作是否是一种常见的约定?在上面的另一个响应中,他暗示POST用于插入操作,而GET用于选择操作?有HTTP纯粹主义者专门指定HEAD、GET、POST、DELETE、UPDATE等方法。烧瓶可容纳所有这些选项。如果指定UPDATE作为HTTP方法,则需要在Flask方法列表中包含“UPDATE”。然而,您是正确的,仅仅使用POST来处理所有“更改”操作是很常见的。