诸神缄默不语-个人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
方法用于从服务器获取资源,一般不会携带请求体,也不会对服务器资源进行修改。
示例:
python">from flask import Flaskapp = 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
等方法,可以使用列表或元组来传递。
示例:
python">from flask import Flask, requestapp = 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
)。
- 示例:
python">@app.route("/get_example", methods=["GET"]) def get_example():return "GET 请求返回的数据"
3.2 POST
方法
- 作用:向服务器发送数据(如表单、JSON 数据),通常用于创建资源。
- 特点:
- 数据放在请求体中,不显示在 URL 中。
- 通常会对服务器上的资源产生影响。
- 示例:
python">@app.route("/post_example", methods=["POST"]) def post_example():data = request.json # 假设发送 JSON 数据return f"接收到的 POST 数据:{data}"
3.3 PUT
方法
- 作用:用于更新服务器上的资源(也可以创建资源)。
- 特点:
- 语义上表示替换整个资源。
- 示例:
python">@app.route("/put_example", methods=["PUT"]) def put_example():data = request.jsonreturn f"PUT 请求更新了数据:{data}"
3.4 DELETE
方法
- 作用:删除服务器上的资源。
- 特点:
- 通常用于删除特定资源。
- 示例:
python">@app.route("/delete_example", methods=["DELETE"]) def delete_example():return "资源已删除"
3.5 PATCH
方法
- 作用:用于部分更新资源。
- 特点:
- 与
PUT
不同,PATCH
只更新资源的某些字段。
- 与
- 示例:
python">@app.route("/patch_example", methods=["PATCH"]) def patch_example():data = request.jsonreturn f"PATCH 请求部分更新了数据:{data}"
3.6 OPTIONS
方法
- 作用:返回服务器支持的 HTTP 方法。
- 特点:
- 通常用于跨域请求的预检(CORS)。
- 示例:
python">@app.route("/options_example", methods=["OPTIONS"]) def options_example():return "OPTIONS 请求返回的响应头"
4. 综合示例
下面是一个支持多种 HTTP 方法的完整示例:
python">from flask import Flask, requestapp = 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
参数必须是列表或元组:python">methods=["GET", "POST"]
-
未指定
methods
默认只支持GET
方法:python">@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
参数的用法。如果有其他疑问,欢迎在评论区交流!