Module 02 · Web App Deployment using Flask
Request and Response Objects – Using GET and POST Modes请求与响应对象
本视频将为您讲解 Flask Request 对象 和 Flask Response 对象 的概念及用法。
定制路由与 HTTP 方法
默认情况下,@app.route 装饰器定义的路径仅响应 GET 方法。
显式定义方法
您可以向 @app.route 装饰器传入 methods 参数来控制该路径响应哪些 HTTP 方法。
- 隐式 GET:
Python@app.route('/') def index(): return "Hello" # 默认响应 GET - 显式 GET(与隐式 GET 等效):
Python@app.route('/', methods=['GET']) def index(): return "Hello" - 多方法支持:可以同时指定多个方法。
Python
@app.route('/health', methods=['GET', 'POST'])
def health_check():
if request.method == 'GET':
return {"status": "OK", "method": "GET"}
elif request.method == 'POST':
return {"status": "OK", "method": "POST"}

Flask Request 对象
所有对 Flask 的 HTTP 调用都伴随着一个由 Flask.Request 类创建的 请求对象 (Request Object)。当客户端请求资源时,您可以在相应的路由方法内检查和使用这个请求对象。
Request 对象可用信息
请求对象提供了客户端请求的详细信息:
| 属性/方法 | 描述 |
|---|---|
remote_addr |
服务器的地址(主机:端口)元组。 |
headers |
随请求发送的 HTTP 头信息。 |
url |
客户端请求的资源 URL。 |
access_route |
转发请求(如经过多个代理)时,列出所有 IP 地址。 |
full_path |
请求的完整路径,包括任何查询字符串。 |
is_secure |
如果请求使用 HTTPS 或 WSS 协议,则为 True。 |
is_json |
如果请求包含 JSON 数据,则为 True。 |
cookies |
字典,包含随请求发送的所有 Cookie。 |
常用请求头数据
您可以从 request.headers 中访问这些常见数据:
Cache-Control: 浏览器如何缓存的信息。Accept: 客户端能够理解的内容类型。Accept-Encoding: 客户端支持的内容编码。User-Agent: 标识客户端应用、操作系统或版本。Accept-Language: 客户端请求的特定语言和区域设置。Host: 请求服务器的主机名和端口号。
自定义 Request 对象:通常可选,因为默认
Flask.Request类的属性和方法已足够使用。
从 Request 对象获取数据
Flask 提供了多种方法来获取请求中的数据,从而避免您手动解析数据:
| 方法/属性 | 描述 | 返回类型示例 |
|---|---|---|
get_data() |
获取 POST 请求 的原始数据,返回 字节 (bytes),需要自行解析。 | bytes |
get_json() |
从 POST 请求 中获取数据并解析为 JSON。 | dict 或 list |
args |
获取 URL 中的 查询参数 (Query Parameters)。 | ImmutableMultiDict |
json |
将请求体数据解析为 字典 (JSON)。 | dict |
files |
提供用户上传的 文件。 | ImmutableMultiDict |
form |
包含表单提交中的所有 表单值。 | ImmutableMultiDict |
values |
args 数据与 form 数据的组合。 |
CombinedMultiDict |

提取特定值
args、form、files 和 values 的返回类型是 Multidict、ImmutableMultiDict 或 CombinedMultiDict。它们行为类似于 Python 字典,您可以使用 索引 或 .get()** 方法** 提取值。

- 索引 (
[]):如果参数不存在,会引发错误并返回400 Bad Request状态,停止服务器。
Pythoncourse_value = request.args['course'] .get()** 方法**:如果参数不存在,返回None,不会中断服务器。
Pythonrating_value = request.args.get('rating')

Flask Response 对象
Flask 也会提供一个 响应对象 (Response Object),您可以使用它向客户端发送 自定义属性和头信息。
常见 Response 属性
| 属性 | 描述 |
|---|---|
status_code |
指示请求的成功或失败状态代码(例如 200, 404)。 |
headers |
包含响应的更多信息。 |
content_type |
响应内容的媒体类型(例如 text/html)。 |
content_length |
响应消息体的大小。 |
content_encoding |
响应内容的编码方式。 |
mimetype |
响应的媒体类型。 |
expires |
响应被视为过期的时间或日期。 |
响应对象方法
set_cookie(): 在客户端设置一个浏览器 Cookie。delete_cookie(): 在客户端删除一个 Cookie。
Response 对象的创建方式
- 默认创建:当您在
@app.route方法中 返回数据 时,Flask 会自动创建一个 **状态码为200、MIME 类型为 **HTML的响应对象。 jsonify():也会自动创建响应对象,状态码为200,MIME 类型为application/json。make_response():用于创建 自定义响应 对象。redirect():Flask 提供的特殊方法,用于返回302** 状态码** 并将客户端重定向到另一个 URL。abort():用于返回带有 错误条件 的响应,例如abort(404)。
总结回顾
在本视频中,您学到了:
- Flask 为每个客户端调用提供了 请求对象 (
Request) 和 响应对象 (Response)。 - 您可以从
request** 对象** 中获取额外的请求信息,例如头信息 (headers)。 - 您可以解析请求对象以获取查询参数 (
args)、请求体 (json,form) 和其他参数。 - 您可以在将响应发送回客户端之前,在
response** 对象** 上设置状态码和自定义头信息。