当前位置: 首页 > news >正文

flask中的Response 如何使用?

在 Flask 中,Response 对象用于生成 HTTP 响应并返回给客户端。以下是其常见用法及示例:


1. 直接返回字符串或 HTML

视图函数返回的字符串会被自动包装为 Response 对象,默认状态码为 200,内容类型为 text/html

@app.route('/')
def index():return "Hello, World!"  # 自动转换为 Response 对象 

2. 使用 make_response 创建响应

通过 make_response 函数可显式创建 Response 对象,便于设置状态码、头部等:

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):

@app.route('/json')
def json_response():data = {"key": "value"}return data  # 自动转为 JSON,状态码默认 200 

4. 返回模板(HTML 文件)

通过 render_template 渲染 HTML 模板并生成响应:

from flask import render_template@app.route('/template')
def show_template():return render_template('index.html')  # 返回渲染后的 HTML 

5. 自定义状态码与头部

返回元组 (response, status_code, headers) 可快速设置状态码和头部:

@app.route('/status')
def custom_status():return "Not Found", 404, {'X-Error': 'Custom Error'}  # 状态码 404 和自定义头部 

6. 使用 Response 类直接构造

通过继承或实例化 Response 类实现更复杂的控制(较少直接使用):

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

通过装饰器统一修改所有响应对象(如添加安全头部):

@app.after_request
def apply_cors(response):response.headers["Access-Control-Allow-Origin"] = "*"return response  # 所有响应均会经过此处处理 

总结

  • 简单场景:直接返回字符串、字典或模板。
  • 复杂控制:使用 make_responseResponse 类。
  • 全局调整:通过 after_request 钩子统一处理响应。
http://www.dtcms.com/a/163739.html

相关文章:

  • Android ndk 编译opencv后部分接口std::__ndk1与项目std::__1不匹配
  • 4.27搭建用户界面
  • 前端vue2修改echarts字体为思源黑体-避免侵权-可以更换为任意字体统一管理
  • 天能资管(SkyAi):全球布局,领航资管新纪元
  • 线程数据同步的三种方式
  • Ansible 守护 Windows 安全(Ansible Safeguards Windows Security)
  • 大数据测试集群环境部署
  • Java实现使用EasyExcel按模板导出文件
  • 论文笔记-多智能体任务分配:动态智能空间中的拍卖与抢占机制
  • MySQL事务(transaction)(笔记)
  • redis 有序集合zrange和zrangebyscore的区别
  • 基础排序方法
  • 学习记录:DAY20
  • 【每日八股】复习 MySQL Day3:锁
  • Android Studio for Platform(ASFP)真机调试
  • Allegro23.1新功能之如何显示中文界面操作指导
  • LangChain入门(四) 部署应用程序
  • unity Orbbec Femto Bolt接入unity流程记录 AzureKinectExamples 插件 使用记录
  • TA学习之路——2.4 图形传统光照模型详解
  • Python 使用一等函数实现设计模式(案例分析:重构“策略”模式)
  • JAVA设计模式——(九)工厂模式
  • 牛客周赛 Round 91
  • MQTT - Android MQTT 编码实战(MQTT 客户端创建、MQTT 客户端事件、MQTT 客户端连接配置、MQTT 客户端主题)
  • 算法设计:回溯法的基础原理与应用
  • 【Linux系统】systemV共享内存
  • 【Java学习】动态代理有哪些形式?
  • Rust 的 Web 世界:actix_web 轻松接收 JSON 请求体
  • 第一讲 | 算法复杂度
  • 1.4 点云数据获取方式——结构光相机
  • Reactor框架介绍