诸神缄默不语-个人CSDN博文目录
在 Flask 中,@app.route 是用于定义路由的核心装饰器,开发者可以通过它为应用指定 URL 映射及相应的处理函数。在处理 HTTP 请求时,不同的业务场景需要支持不同的 HTTP 方法,而 @app.route 的 methods 参数正是用于指定路由支持的 HTTP 方法。
本文将详细介绍 @app.route 的默认设置、methods 参数的显式设置,以及常见的 HTTP 方法及其使用场景,并结合代码示例进行说明。
文章目录
- 1. 默认 `methods` 参数
- 2. 显式设置 `methods` 参数
- 3. 常见的 HTTP 方法
- 3.1 `GET` 方法
- 3.2 `POST` 方法
- 3.3 `PUT` 方法
- 3.4 `DELETE` 方法
- 3.5 `PATCH` 方法
- 3.6 `OPTIONS` 方法
- 4. 综合示例
- 5. 注意事项
- 6. 总结
1. 默认 methods 参数
如果没有显式指定 methods 参数,Flask 默认只支持 GET 方法。GET 方法用于从服务器获取资源,一般不会携带请求体,也不会对服务器资源进行修改。
示例:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def index():
return "默认只支持 GET 请求"
if __name__ == "__main__":
app.run(debug=True)
- 访问方式:通过浏览器或使用工具(如
curl)发送GET请求:curl http://127.0.0.1:5000/ - 结果:服务器返回
"默认只支持 GET 请求"。 - 限制:如果发送其他方法(如
POST),会返回405 Method Not Allowed。
2. 显式设置 methods 参数
通过 methods 参数,可以为路由显式指定支持的 HTTP 方法。如果需要同时支持 GET 和 POST 等方法,可以使用列表或元组来传递。
示例:
from flask import Flask, request
app = Flask(__name__)
@app.route("/submit", methods=["GET", "POST"])
def submit():
if request.method == "GET":
return "这是一个 GET 请求"
elif request.method == "POST":
return "这是一个 POST 请求"
if __name__ == "__main__":
app.run(debug=True)
- 访问方式:
- 发送
GET请求:
返回结果:curl http://127.0.0.1:5000/submit这是一个 GET 请求。 - 发送
POST请求:
返回结果:curl -X POST http://127.0.0.1:5000/submit这是一个 POST 请求。
- 发送
3. 常见的 HTTP 方法
3.1 GET 方法
- 作用:从服务器获取资源。
- 特点:
- 请求无副作用,不改变服务器上的资源。
- 数据通常通过 URL 参数传递(
query string)。
- 示例:
@app.route("/get_example", methods=["GET"]) def get_example(): return "GET 请求返回的数据"
3.2 POST 方法
- 作用:向服务器发送数据(如表单、JSON 数据),通常用于创建资源。
- 特点:
- 数据放在请求体中,不显示在 URL 中。
- 通常会对服务器上的资源产生影响。
- 示例:
@app.route("/post_example", methods=["POST"]) def post_example(): data = request.json # 假设发送 JSON 数据 return f"接收到的 POST 数据:{data}"
3.3 PUT 方法
- 作用:用于更新服务器上的资源(也可以创建资源)。
- 特点:
- 语义上表示替换整个资源。
- 示例:
@app.route("/put_example", methods=["PUT"]) def put_example(): data = request.json return f"PUT 请求更新了数据:{data}"
3.4 DELETE 方法
- 作用:删除服务器上的资源。
- 特点:
- 通常用于删除特定资源。
- 示例:
@app.route("/delete_example", methods=["DELETE"]) def delete_example(): return "资源已删除"
3.5 PATCH 方法
- 作用:用于部分更新资源。
- 特点:
- 与
PUT不同,PATCH只更新资源的某些字段。
- 与
- 示例:
@app.route("/patch_example", methods=["PATCH"]) def patch_example(): data = request.json return f"PATCH 请求部分更新了数据:{data}"
3.6 OPTIONS 方法
- 作用:返回服务器支持的 HTTP 方法。
- 特点:
- 通常用于跨域请求的预检(CORS)。
- 示例:
@app.route("/options_example", methods=["OPTIONS"]) def options_example(): return "OPTIONS 请求返回的响应头"
4. 综合示例
下面是一个支持多种 HTTP 方法的完整示例:
from flask import Flask, request
app = Flask(__name__)
@app.route("/", methods=["GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS"])
def handle_requests():
if request.method == "GET":
return "GET 请求"
elif request.method == "POST":
return "POST 请求"
elif request.method == "PUT":
return "PUT 请求"
elif request.method == "DELETE":
return "DELETE 请求"
elif request.method == "PATCH":
return "PATCH 请求"
elif request.method == "OPTIONS":
return "OPTIONS 请求"
if __name__ == "__main__":
app.run(debug=True)
5. 注意事项
-
methods参数必须是列表或元组:methods=["GET", "POST"] -
未指定
methods默认只支持GET方法:@app.route("/") # 等价于 methods=["GET"] -
请求方法区分大小写:
Flask 的methods参数值需要大写,比如"GET",否则会导致路由匹配失败。
6. 总结
- Flask 的
@app.route默认只支持GET方法。 - 通过
methods参数,可以显式指定支持的 HTTP 方法。 - 常见 HTTP 方法有
GET、POST、PUT、DELETE、PATCH和OPTIONS,每种方法有不同的应用场景。 - 动态处理不同 HTTP 方法,可以结合
request.method编写逻辑。
希望通过这篇文章,你能够掌握 Flask 中 @app.route 的 methods 参数的用法。如果有其他疑问,欢迎在评论区交流!






![[搜广推]王树森推荐系统——其他召回通道](https://i-blog.csdnimg.cn/direct/1b307e3aedb6439f975e8b48ff3e76f5.png)













