在 Flask 中,Response
对象用于生成 HTTP 响应并返回给客户端。以下是其常见用法及示例:
1. 直接返回字符串或 HTML
视图函数返回的字符串会被自动包装为 Response
对象,默认状态码为 200
,内容类型为 text/html
:
python
@app.route('/')
def index():
return "Hello, World!" # 自动转换为 Response 对象
2. 使用 make_response
创建响应
通过 make_response
函数可显式创建 Response
对象,便于设置状态码、头部等:
python
from flask import make_response
@app.route('/custom')
def custom_response():
resp = make_response("Custom Response", 201) # 内容与状态码
resp.headers['X-Custom-Header'] = 'Value' # 添加自定义头部
return resp
3. 返回 JSON 数据
直接返回字典时,Flask 会自动将其转换为 JSON 格式(需确保视图函数返回 dict
或使用 jsonify
):
python
@app.route('/json')
def json_response():
data = {"key": "value"}
return data # 自动转为 JSON,状态码默认 200
4. 返回模板(HTML 文件)
通过 render_template
渲染 HTML 模板并生成响应:
python
from flask import render_template
@app.route('/template')
def show_template():
return render_template('index.html') # 返回渲染后的 HTML
5. 自定义状态码与头部
返回元组 (response, status_code, headers)
可快速设置状态码和头部:
python
@app.route('/status')
def custom_status():
return "Not Found", 404, {'X-Error': 'Custom Error'} # 状态码 404 和自定义头部
6. 使用 Response
类直接构造
通过继承或实例化 Response
类实现更复杂的控制(较少直接使用):
python
from flask import Response
@app.route('/stream')
def stream_data():
def generate():
yield "Data chunk 1\n"
yield "Data chunk 2\n"
return Response(generate(), mimetype='text/plain') # 流式响应
7. 全局响应处理(after_request
)
通过装饰器统一修改所有响应对象(如添加安全头部):
python
@app.after_request
def apply_cors(response):
response.headers["Access-Control-Allow-Origin"] = "*"
return response # 所有响应均会经过此处处理
总结
- 简单场景:直接返回字符串、字典或模板。
- 复杂控制 :使用
make_response
或Response
类。 - 全局调整 :通过
after_request
钩子统一处理响应。