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

【FastAPI】 响应类型详解:从默认 JSON 到自定义响应

FastAPI 响应类型详解从默认 JSON 到自定义响应HTML/文件/流/重定向一、FastAPI 响应机制概述FastAPI 默认会将路径操作函数返回的 Python 对象如dict、list、Pydantic Model自动转换为JSON 格式并通过JSONResponse返回客户端。转换依赖jsonable_encoder无需手动序列化。return{message:Hello World}# 自动转为 JSON但若需返回非 JSON 数据如 HTML、文件、流、纯文本等必须显式指定响应类型。二、响应类型设置方式共 6 种方式一在app.get()装饰器中设置response_class适用场景固定返回类型如HTML、纯文本、文件非动态流式fromfastapiimportFastAPIfromfastapi.responsesimportHTMLResponse,PlainTextResponse,FileResponse appFastAPI()app.get(/,response_classHTMLResponse)asyncdefroot():returnh1这是一级标题/h1响应类型response_class用途HTMLResponseHTMLResponse返回 HTML 内容如网页PlainTextResponsePlainTextResponse返回纯文本不含 HTML 标签FileResponseFileResponse返回文件下载如图片、txt、pdf示例纯文本响应app.get(/text,response_classPlainTextResponse)asyncdefget_text():return这是纯文本示例文件下载app.get(/file/txt,response_classFileResponse)asyncdefget_file():return./files/1.txt 注意FileResponse会自动设置Content-Disposition: attachment触发下载。方式二直接返回响应对象推荐用于动态响应适用场景文件流、图片、自定义 MIME 类型、重定向、流式响应返回图片FileResponseapp.get(/file/picture)asyncdefget_picture():returnFileResponse(./files/1.png)自动设置Content-Type: image/png流式响应StreamingResponsefromfastapi.responsesimportStreamingResponseapp.get(/stream)asyncdefget_stream():defiter_file():withopen(./files/1.png,rb)asf:whilechunk:f.read(1024):yieldchunkreturnStreamingResponse(iter_file(),media_typeimage/png)使用生成器函数模拟流式传输适用于大文件、视频流等。自定义 MIME 类型与文件名app.get(/file/download)asyncdefdownload_file():returnFileResponse(path./files/1.txt,media_typetext/plain,# 自定义 MIME 类型filenamenews.txt# 下载时的文件名)可通过filename设置下载后文件名打破原文件名限制。方式三使用RedirectResponse重定向fromfastapi.responsesimportRedirectResponseapp.get(/redirect)asyncdefredirect_to_home():returnRedirectResponse(url/)浏览器将跳转到/地址返回302状态码。重定向到外链如百度app.get(/to-baidu)asyncdefto_baidu():returnRedirectResponse(urlhttps://www.baidu.com)方式四自定义响应数据格式response_model Pydantic用Pydantic 模型定义 API 返回结构实现类型安全与文档自动生成。步骤 1定义 Pydantic 模型frompydanticimportBaseModelclassNews(BaseModel):id:inttitle:strcontent:str步骤 2在路由中启用response_modelapp.get(/news/{id},response_modelNews)asyncdefget_news(id:int):return{id:id,title:这是新闻标题,content:这是新闻内容}如果返回数据不符合News模型结构 → FastAPI 会返回422错误Swagger UI 会根据response_model生成响应示例三、FastAPI 响应类型总结表响应类型用途何时使用示例JSONResponse默认返回 JSON 数据一般 API 接口return {msg: ok}HTMLResponse返回 HTML 内容页面渲染、内嵌 HTMLresponse_classHTMLResponsePlainTextResponse返回纯文本日志、简单信息response_classPlainTextResponseFileResponse文件下载下载 PDF、TXT、图片return FileResponse(./file.txt)StreamingResponse流式响应大文件、视频、音频流StreamingResponse(generator, media_typevideo/mp4)RedirectResponse重定向跳转页面、登录后跳转return RedirectResponse(url/)四、易错点 注意事项易错点说明解决方案❌response_class放在函数外导致AttributeError必须在装饰器里写response_class...❌FileResponse路径写错文件找不到返回 404使用os.path或Path拼接路径❌ 流式响应未使用生成器报错或无法传输用def iter_func(): yield chunk❌response_model返回字段类型不匹配返回422错误保证数据完全符合模型结构❌ 忘记import响应类编译错误一定要导入from fastapi.responses import ...五、完整代码示例可直接运行fromfastapiimportFastAPIfromfastapi.responsesimport(HTMLResponse,PlainTextResponse,FileResponse,StreamingResponse,RedirectResponse)frompydanticimportBaseModelimportos appFastAPI()# 1. 默认 JSON 响应自动app.get(/)asyncdefroot():return{message:Hello World}# 2. HTML 响应固定类型app.get(/html,response_classHTMLResponse)asyncdefget_html():returnh1这是网页标题/h1# 3. 纯文本响应app.get(/text,response_classPlainTextResponse)asyncdefget_text():return这是纯文本内容# 4. 文件下载自动触发下载app.get(/file/download)asyncdefget_txt():returnFileResponse(./files/1.txt,filenamenews.txt)# 5. 图片响应app.get(/image)asyncdefget_image():returnFileResponse(./files/1.png)# 6. 流式响应支持大文件app.get(/stream)asyncdefstream_video():defiter_file():withopen(./files/1.png,rb)asf:whilechunk:f.read(1024):yieldchunkreturnStreamingResponse(iter_file(),media_typeimage/png)# 7. 重定向app.get(/redirect)asyncdefredirect_home():returnRedirectResponse(url/)# 8. 自定义响应数据格式Pydantic response_modelclassNews(BaseModel):id:inttitle:strcontent:strapp.get(/news/{id},response_modelNews)asyncdefget_news(id:int):return{id:id,title:FastAPI 响应类型详解,content:学习 FastAPI 的重要知识点}

相关文章:

【FastAPI】 响应类型详解:从默认 JSON 到自定义响应

FastAPI 响应类型详解:从默认 JSON 到自定义响应(HTML/文件/流/重定向) 一、FastAPI 响应机制概述 FastAPI 默认会将路径操作函数返回的 Python 对象(如 dict、list、Pydantic Model)自动转换为 JSON 格式,…...

all-MiniLM-L6-v2详细步骤:Ollama模型量化部署(Q4_K_M)显存再降40%

all-MiniLM-L6-v2详细步骤:Ollama模型量化部署(Q4_K_M)显存再降40% 在资源受限的环境中部署高效的句子嵌入模型一直是开发者的痛点。all-MiniLM-L6-v2作为轻量级语义表示模型,虽然已经比标准BERT模型小了80%以上,但在…...

工程师必备:高效阅读Datasheet的实用技巧

1. 为什么工程师必须掌握Datasheet阅读能力在嵌入式系统和硬件开发领域,Datasheet(数据手册)就是芯片的"使用说明书"。我从业十余年,见过太多工程师因为不会正确阅读Datasheet而踩坑的案例。有一次团队花了两个月调试一…...

XZ8011双节8.4V充电芯片 输入电压8.9-15V

XZ8011是一款完整的双节锂离子电池恒压恒流充电管理芯片。采用ESOP8封装形式,外加很少的外部元件,使其成为便携应用的理想选择。 XZ8011通过外接电流检测电阻即可实现高精度的充电电流。其内部有热反馈电路可以对在充电过程中对芯片温度加以控制。充电截…...

全双工和半双工的区别

全双工和半双工是描述通信双方数据流动方向的两种基本模式,它们决定了通信链路的利用率、硬件复杂度和应用场景。下面从定义、工作机制、典型协议、优缺点、实际应用五个方面展开。一、基本定义模式英文数据传输方向比喻单工Simplex单向,只能A→B&#x…...

从火柴盒到AI:探索MENACE的数字化旅程

在计算机科学的历史中,有许多有趣的实验和发明,其中之一便是由唐纳德米奇(Donald Michie)设计的“火柴盒计算机”(Matchbox Educable Noughts and Crosses Engine,简称MENACE)。这个装置使用了火柴盒和彩色珠子来模拟人工智能,教机器玩井字游戏(Tic-Tac-Toe)。本文将…...

单线程 Redis 的高性能之道

引言Redis 以单线程模型处理网络请求与命令操作,却能在高并发场景下保持惊人的吞吐能力。这背后离不开三大基石:全内存存储、高效数据结构(哈希表、跳表等)以及 epoll 多路复用机制,让单线程能够高效处理海量连接。 随…...

解决Python SocketIO客户端连接问题

引言 在构建一个IT自动化系统时,管理多个电脑的需求日益增强。为了实现这一目标,我采用了以下技术栈: 前端:React 后端****中间层:NodeJS 终端代理:Python 然而,在使用Python实现SocketIO客户端时,我遇到了一个问题:Python客户端无法正常打印连接成功的消息。本文将详…...

无缝跨平台体验:APK-Installer让Windows运行Android应用的革命性工具

无缝跨平台体验:APK-Installer让Windows运行Android应用的革命性工具 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 在数字化时代,用户常常面临…...

清明节海报设计指南:4个要点打造高级感视觉呈现

每到清明临近,总有人为海报设计发愁。想做一张既体面又有格调的清明节海报,打开设计软件却不知从何下手,勉强拼凑出来的效果又总觉得差点意思。要么太过花哨显得不够庄重,要么过于简陋显得敷衍。其实高级感并不难,关键…...

文件夹的修改日期可以改吗?分享你三个修改方法

在电脑文件管理中,系统不支持直接修改文件夹的「修改时间」,但日常整理文件、统一项目时间戳、还原备份文件夹时间、办公归档时,经常需要自定义修改这个属性。本文给大家整理了3 种实用方法:第一种是汇帮批量重命名工具&#xff0…...

FreeRTOS 工程化要点:任务划分、优先级设计与 CPU 占用率监控

大家好,我是杂烩君。 今天我们来简单分享:FreeRTOS任务怎么拆、优先级怎么配、CPU 占用怎么看。1. 任务划分原则 1.1 单一职责:一个任务只干一件事 把"串口接收 数据解析 指令执行 结果反馈"全塞一个任务,解析环节一…...

网站设计:抓住这3点细节,用户体验感飙升!

网站制作要不要做得那么细呢?实际上,当我们发现很多网站制作得很优秀时,怎么看都不知道是如何做好的,但就是感觉不错,实际上这就体现在了制作网站细节上。很多时候设计网站往往容易忽视这三个细节:1、网页图…...

V821 DISP 显示驱动流程分析

文章目录1、前言2、环境介绍3、大致流程4、程序阅读5、总结1、前言 在全志 V821 下调试 RGB 屏幕时,因为一直创建不出 fb 节点,这里记录一下当时阅读显示驱动框架的过程。仅供参考。 2、环境介绍 sdk:V821 tina sdk v1.3 3、大致流程 初…...

实验室服务器远程访问终极方案:SSH 反向隧道 + systemd 自动重连

🚀 实验室服务器远程访问终极方案:SSH 反向隧道 systemd 自动重连适用于: 没有公网 IP 的实验室服务器想用 VSCode / SSH / Jupyter 远程开发希望稳定、自动重连、开机自启🧠 一、问题背景 在很多实验室环境中: GPU 服…...

赋能智能体大脑:在快马平台中集成AI模型实现高级对话能力

在探索AI辅助开发的过程中,我发现智能体的核心能力很大程度上取决于其"大脑"——也就是背后支撑决策的AI模型。最近在InsCode(快马)平台实践了一个很有意思的项目:如何为智能体集成AI模型来实现高级对话功能。整个过程让我深刻体会到&#xff…...

OpenClaw 局域网访问配置文档

OpenClaw 局域网访问配置文档 概述 本文档详细说明了如何配置 OpenClaw 以允许局域网内的其他设备访问,包括所有相关配置参数的作用和说明。 当前配置状态 网关服务信息 服务端口: 18789 绑定模式: lan (局域网访问) 认证方式: password (密码认证) 访问密码: xxxxxx 详细…...

Redis 内存淘汰与过期策略

引言Redis 作为内存数据库,内存资源有限,必须妥善处理内存占用问题。本文梳理两种核心机制:淘汰策略决定内存达到上限时如何移除数据,涵盖 noeviction、LRU、LFU 等多种算法及其实现细节;过期策略(惰性删除…...

高纯水系统如何保障锂电池生产良率?

在锂电池制造过程中,生产用水纯度直接关联产品性能与安全。随着新能源汽车与储能产业快速发展,行业对电池一致性与稳定性的要求持续提升,超纯水已成为核心制程环节的关键辅材。一、锂电池生产用水标准 锂电池生产涉及正负材料制备、浆料调配、…...

[MediaForge] 音频技术深度解析(五):常见问题与快速解决

目录 问题排查方法论 音频采集常见问题 音频重采样常见问题 音频编码常见问题 音频封装常见问题 端到端完整流程问题 快速定位工具集 AI 辅助排查指南 1. 问题排查方法论 1.1 通用排查流程 ┌───────────────────────────────────────…...

突破性分子动力学自由能计算工具:gmx_MMPBSA技术深度解析与实战指南

突破性分子动力学自由能计算工具:gmx_MMPBSA技术深度解析与实战指南 【免费下载链接】gmx_MMPBSA gmx_MMPBSA is a new tool based on AMBERs MMPBSA.py aiming to perform end-state free energy calculations with GROMACS files. 项目地址: https://gitcode.co…...

3分钟掌握绝地求生压枪黑科技:罗技鼠标宏终极指南

3分钟掌握绝地求生压枪黑科技:罗技鼠标宏终极指南 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg 还在为《绝地求生》中AKM的后坐力而…...

2026海雅达HDT500手持终端PDA“12米远距扫描”应用案例:造纸厂原纸立库高层纸卷条码采集应用

标准工业原纸卷重达2吨、宽幅近2.8米,在12-15米高的原纸仓库中堆垛高达8-10米。高空扫码怎么破? 传统PDA扫码距离仅1米,难道必须冒生命危险爬上纸堆?海雅达HDT500的12米扫描头如何实现“降维打击”? 如何利用海雅达H…...

通过 C# 将 RTF 格式转换为 Word 文档

在 .NET 项目中处理文档格式转换时,RTF 转 Word 是一个常见的需求。RTF(Rich Text Format)作为一种跨平台的文档格式,常被用作中间载体,而最终交付时往往需要转换为更通用的 Word 格式(.doc 或 .docx&#…...

水质溶解氧在线监测仪:实时监测与数据记录解析

水质溶解氧在线监测仪是一款专注于水体溶解氧与水温监测的专业设备,可快速记录水体关键参数,同时支持扩展多种水质参数传感器,能根据不同使用需求灵活组合配置。设备内置存储功能,可留存历史监测数据与报警记录,还支持…...

家用混动SUV舒适度技术科普入门:从实测看核心技术要点

在家用混动SUV的日常使用中,接送孩子上下学、家庭短途出行是最高频的场景,而“舒适度”并非单纯的主观感受,而是一套涵盖空间设计、座椅工程、材质工艺、座舱适配及动力平顺性的综合技术体系。对于有儿童乘坐需求的家庭而言,舒适度…...

ORA-12518:Oracle 监听程序无法分发客户端连接原因及解决方法

本文主要讲解ORA-12518:Oracle监听程序无法分发客户端连接的原因分析及解决方法。问题描述数据中台的同步任务有时会报错如下:ORA-12518, TNS:listener could not hand off client connection。意即Oracle监听程序无法分发客户端连接,原因分析只是有时候…...

判断当前页面是否以「添加到主屏幕」应用形态启动 (快捷方式\APP、套壳包等启动)

这里写自定义目录标题判断当前页面是否以「添加到主屏幕」应用形态启动判断当前页面是否以「添加到主屏幕」应用形态启动 /*** 判断当前页面是否以「添加到主屏幕」应用形态启动* - iOS Safari: navigator.standalone* - 标准 PWA: display-mode 为 standalone/fullscreen/min…...

偏迹(Partial Trace)的定义和数学物理意义

我们将通过多个计算示例来掌握偏迹(Partial Trace)。1. 偏迹的定义1.1 动机在量子力学中,复合系统 的态用密度矩阵 ​ 描述。那么,当我们只关心子系统 时,需要忽略掉其中 的状态,这里通过对子系统 求平…...

定时任务XXL-Job

目录为什么是XXL-Job?SpringBoot 整合XXL-Job1)环境准备2)SpringBoot 项目依赖3)application.yml 配置4)XXL-Job 配置类5)定时任务业务类(核心代码)6)调度中心Web可视化界…...