Flask - HTTP 方法
Flask – HTTP 方法 (HTTP methods)
Section titled “Flask – HTTP 方法 (HTTP methods)”超文本传输协议(HTTP,HyperText Transfer Protocol)是万维网(World Wide Web)上数据通信的基础。它定义了一组请求方法(Request Methods,常被称为“HTTP 动词”或“HTTP verbs”),用于指示针对给定资源(由 URL 标识)要执行的期望操作。
常见 HTTP 方法:
| 序号 | 方法 | 描述 |
|---|---|---|
| 1 | GET | 请求检索由 Request-URI 标识的信息。应仅用于获取数据,不应产生其他副作用。这是浏览网页时最常用的方法。 |
| 2 | POST | 将数据提交到由 Request-URI 标识的资源进行处理(例如,提交网页表单、上传文件)。通常会导致服务器上的状态改变或产生副作用。 |
| 3 | PUT | 用请求负载完全替换目标资源的当前所有表示。常用于完全更新现有资源。 |
| 4 | DELETE | 请求源服务器删除由 Request-URI 标识的资源。 |
| 5 | HEAD | 与 GET 完全相同,但服务器在响应中绝不能返回消息体。可用于获取资源的元信息而无需传输完整内容。 |
| 6 | OPTIONS | 请求有关目标资源可用通信选项的信息(例如,支持哪些 HTTP 方法)。 |
| 7 | PATCH | 对资源进行部分修改。与 PUT 不同,它只更新指定的字段。 |
在 Flask 路由中指定方法
Section titled “在 Flask 路由中指定方法”默认情况下,Flask 路由仅响应 GET 请求(并隐式响应 HEAD 和 OPTIONS)。要让路由处理其他方法,您必须在使用 @app.route() 装饰器时,通过 methods 参数明确列出它们。
示例:处理登录表单的 GET 和 POST 请求
Section titled “示例:处理登录表单的 GET 和 POST 请求”此示例演示了如何通过单个 URL (/login) 在使用 GET 访问时显示表单,并在使用 POST 访问时处理提交的表单数据。
- 在您的
templates文件夹中创建名为login_page.html的 HTML 模板文件:
<!DOCTYPE html><html><head> <title>Login Example</title></head><body> <h1>Login Form</h1> <form action="{{ url_for('handle_login') }}" method="post"> <p>Enter Name: <input type="text" name="username"></p> <p><input type="submit" value="Submit"></p> </form></body></html>注意 <form> 标签中的 method="post"。
- 创建 Flask 应用脚本 (
app.py文件):
from flask import Flask, redirect, url_for, request, render_template
app = Flask(__name__)
# 成功登录的路由@app.route('/success/<name>')def login_success(name): return f'Welcome {name}!'
# 处理显示表单 (GET) 和处理表单提交 (POST) 的路由@app.route('/login', methods=['POST', 'GET'])def handle_login(): if request.method == 'POST': # 请求是 POST:访问提交的表单数据 user_name = request.form['username'] # 使用输入的 'name' 属性访问数据 # 重定向到成功页面,传递用户名 return redirect(url_for('login_success', name=user_name)) else: # 请求是 GET:显示登录表单模板 return render_template('login_page.html')
if __name__ == '__main__': app.run(debug=True)解释:
methods=['POST', 'GET']:这明确允许/login路由处理 POST 和 GET 请求。request.method:在handle_login函数内部,我们检查当前请求的方法。- 如果
request.method == 'POST':当表单提交时执行此代码块。我们从request.form(它包含请求体中提交的表单数据)中检索名为username的输入字段的值。然后,我们使用url_for构建 URL 并传递提取的user_name,将用户重定向到login_success路由。 - 如果
request.method == 'GET'(else块):当用户首次导航到/login时执行此代码块。我们渲染login_page.html模板以显示表单。 request.args:如果数据是通过 URL 查询字符串发送的(例如/search?term=flask),您将使用request.args.get('term')来访问它。这通常用于 GET 请求。
运行示例:
-
保存文件并运行
python app.py。 -
打开浏览器并访问
http://127.0.0.1:5000/login。您将看到登录表单(由 GET 请求处理)。 -
输入姓名(例如“Alice”)并点击 Submit(提交)。
交互描述:
浏览器将一个 POST 请求发送到 /login,其中包含您在表单数据中输入的姓名。Flask 将此请求路由到 handle_login()。if request.method == 'POST' 代码块执行,从 request.form['username'] 中检索到“Alice”,并生成一个重定向响应到 /success/Alice。浏览器接收到此重定向并向 /success/Alice 发起一个新的 GET 请求。Flask 将此请求路由到 login_success(name='Alice'),该函数返回“Welcome Alice!”消息。