flask中的Response 如何使用?

在 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_responseResponse 类。
  • 全局调整 :通过 after_request 钩子统一处理响应。
相关推荐
quantdash_cc2 分钟前
如何设计高效率的批量股票数据获取程序?QuantDash Python SDK 全市场行情拉取实战指南
开发语言·python·数据分析·量化交易·股票数据·quantdash
AskHarries2 分钟前
花了 500 大洋买下 bbs.ss,我决定做一个真正属于出海人的论坛
后端
砚底藏山河10 分钟前
拉数管道设计:从一次性脚本到可重启的数据流水线(魔码量化实战 #01)
java·数据库·python·金融·maven
SimonKing14 分钟前
一文终结 Java 路径加载争议:斜杠 什么时候该加,什么时候不该加
java·后端·程序员
东莞市云毅网络有限公司15 分钟前
企业非结构化资料拆分成可引用片段:一套能跑通的预处理流水线
python·数据清洗·rag·企业知识库·文档解析
淼澄研学16 分钟前
Sonos空间音频技术解析与Python本地API控制实操
开发语言·python·音视频
BS30813_vx24 分钟前
31754+基于 Spring Boot + Vue 的网络文学交流分享平台设计与实现
vue.js·spring boot·后端
蛋先生DX27 分钟前
内存安全翻车现场的罪魁祸首,根源就在这三步里?
c++·后端·编程语言
Rain的Java大神之路32 分钟前
手写一个Spring容器
java·后端·mysql·spring·面试
IT_陈寒35 分钟前
明明设了默认值,为什么我的JavaScript函数参数还是undefined?
前端·人工智能·后端