“我的表单”通过GET
发送age参数,并且它仅与此配合使用:
@app.route("/foo")
def foo():
age = request.args['age']
我没有打扰
@app.route('/foo', methods=['GET', 'POST'])
有关系吗?
答案 0 :(得分:3)
从一定意义上说,这没关系。但是通常情况下,您希望具有多个功能来完成类似的事情。 POST到/ foo,表示添加一个元素,GET到/ foo,表示检索元素,DELETE到/ foo,表示删除元素。
答案 1 :(得分:0)
如果您没有为methods
指定app.route()
参数,则默认值为仅接受GET
和HEAD
请求(*)。
仅在需要接受其他HTTP方法(例如methods
)时才需要显式设置POST
,否则Flask在以下情况下会以405 Method Not Allowed HTTP response code进行响应客户端使用您未列出的HTTP方法,并且不会调用您的route函数。
因此,如果您的路线应同时处理GET
和POST
的请求,但是您忘记将methods=['GET', 'POST']
添加到@route()
,则您有POST
请求中的错误导致405响应,而不是您的路由来处理该请求。
但是,在您的情况下,您应该不使用methods=['GET', 'POST']
,而是让尝试使用POST的客户端知道您的路由无法处理该方法。明确指出错误总比让它静默通过更好。
(*)每当您使用注册处理HEAD
的路由时都会添加GET
,并且在有HEAD
请求的情况下,您的路由被称为然后仅将标头提供给客户端。 Flask会自动为您处理OPTIONS
,在这种情况下不会调用该路由。
答案 2 :(得分:0)
一如既往,答案是:它取决于。
如果不提供“方法”参数,则Flask假定HTTP方法为GET(并且也接受HEAD)。只要该假设成立,您的代码就可以正常工作。
但是,如果您的网页是以POST方法(或DELETE等)进行通信的,则Flask将失败并抱怨不允许POST(或DELETE等)请求。
将此要求视为冗余检查。可以编写Flask来适应HTTP请求中使用的任何方法。相反,Flask坚持要求您将方法指定为有意进行通信的信号。这项要求使Flask的实现变得简单一些,但要付出协调程序员与客户-服务器接口的责任。