news 2026/7/14 13:54:18

FastAPI python web开发- 响应模型 - 返回类型 (response_model) 异常错误处理 (HTTPException) 响应状态码 (status_code)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
FastAPI python web开发- 响应模型 - 返回类型 (response_model) 异常错误处理 (HTTPException) 响应状态码 (status_code)

大家好,我是Java1234_小锋老师,最近更新《2027版 一天学会 FastAPI Python web开发 视频教程(无废话版)》专辑,感谢大家支持。

本课程主要介绍和讲解FastAPI简介,HelloWorld实现,自动生成交互式API文档,路径参数,查询参数,请求体,参数校验,响应模型 ,表单数据和模型,中间件,依赖注入,集成SQLAlchemy ORM 操作数据库,集成Pydantic数据校验等

视频教程+课件+源码打包下载:

链接:https://pan.baidu.com/s/1_NzaNr0Wln6kv1rdiQnUTg
提取码:0000

响应模型 - 返回类型 (response_model) & 异常错误处理 (HTTPException) & 响应状态码 (status_code)

响应模型 - 返回类型 (response_model)

什么是响应模型 (response_model)

在 FastAPI 中,响应模型指的是你声明的、用于规定 API 接口返回数据应遵循的格式和结构的 Pydantic 模型。你可以通过在路径操作函数的返回类型注解装饰器的 response_model 参数来声明它。

为什么使用响应模型?

使用响应模型的核心价值在于:

  • 数据校验与安全保障:FastAPI 会自动校验返回的数据是否符合模型定义。如果数据无效(例如缺少必填字段),FastAPI 会返回服务器错误,而不是将错误数据返回给客户端。更重要的是,它会将输出数据限制并过滤为模型中所定义的内容,这可以避免意外返回敏感信息(如密码),对安全性至关重要。

  • 自动生成 API 文档:响应模型会为你的 API 生成清晰的 JSON Schema,并自动在 Swagger UI (/docs) 等交互式文档中展示,方便前端或第三方开发者查看。

  • 数据序列化与过滤:FastAPI 会使用 Pydantic 将你的返回数据(可以是字典、数据库对象等)自动序列化为符合模型的 JSON 格式。同时,你可以利用模型的excludeinclude等参数精细控制哪些字段出现在最终的响应中。

我们先看一个数据验证实例:

class Item(BaseModel): name: str price: float # 可选字段,默认值为 None tax: float | None = None ​ # 在装饰器中通过 response_model 指定 @app.post("/create_item/", response_model=Item) async def create_item(item: Item): # 假设这里进行了数据库操作,然后返回一个字典 # FastAPI 会使用 Item 模型来校验和过滤这个字典 return {"name": item.name, "price": item.price, "tax": item.tax}

如果我们把return里的price属性去掉,就会报错。

我们在看一个比较实用的例子,用户返回信息不带密码,重新定义一个新的用户类UserOut作为返回类型。

class UserIn(BaseModel): username: str password: str full_name: str | None = None ​ ​ class UserOut(BaseModel): username: str full_name: str | None = None ​ ​ @app.post("/user/", response_model=UserOut) async def create_user(user: UserIn): return user

然后打开浏览器访问http://127.0.0.1:8000/docs,进行测试

异常错误处理 (HTTPException) & 响应状态码 (status_code)

在 FastAPI 中,HTTPException是一个内置的异常类,用于在 API 处理过程中主动抛出 HTTP 错误响应。当你的业务逻辑遇到问题(如资源不存在、权限不足、参数无效等)时,你可以抛出 HTTPException,FastAPI 会捕获它并自动将其转换为符合 HTTP 规范的 JSON 错误响应(包含状态码和详细信息)。

使用 HTTPException 的核心优势:

  • 标准化错误响应:返回标准的 HTTP 状态码和错误信息,方便客户端处理。

  • 自动生成文档:异常信息会出现在 OpenAPI 文档中(如果声明了responses),提高 API 的可理解性。

  • 与依赖注入等机制无缝集成:可以在依赖项、中间件等任何位置抛出。

我们看一个实例:

@app.get("/items/{item_id}") async def read_item(item_id: int): if item_id < 1: # 抛出 HTTPException,状态码 400,并附带详细信息 raise HTTPException(status_code=400, detail="ID必须大于0") # 模拟查询,假设只有 id=1 存在 if item_id != 1: raise HTTPException(status_code=404, detail="Item项不存在") return {"item_id": item_id, "name": "Sample Item"}

参数说明

  • status_code:HTTP 状态码(如 400、404、403、500 等),可以是整数或fastapi.status中定义的常量(推荐使用)。

  • detail:错误描述信息,可以是字符串或可转为 JSON 的对象(如字典、列表)。

  • headers(可选):可以添加自定义响应头。

然后打开浏览器访问http://127.0.0.1:8000/docs,进行测试

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 13:52:38

抖音视频批量下载终极指南:免费开源工具5分钟快速上手

抖音视频批量下载终极指南&#xff1a;免费开源工具5分钟快速上手 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback suppo…

作者头像 李华
网站建设 2026/7/14 13:52:28

Bebas Neue:为什么这款开源字体成为现代设计的秘密武器?

Bebas Neue&#xff1a;为什么这款开源字体成为现代设计的秘密武器&#xff1f; 【免费下载链接】Bebas-Neue Bebas Neue font 项目地址: https://gitcode.com/gh_mirrors/be/Bebas-Neue 想象一下这样的场景&#xff1a;你正在为一个科技创业公司设计品牌标识&#xff0…

作者头像 李华
网站建设 2026/7/14 13:49:24

GPT-Image-2 人物设计:绝美国风角色人物提示词

生成一张单人角色设定图,只展示一个角色。3D 国风动漫风格,次世代 PBR 材质肌肤,皮肤细腻有自然瑕疵,超详细质感。画面清新干净,高细节,高清渲染,柔和光影,写实国风质感。 角色名:青黛 年龄:约 19 岁 气质:梦幻唯美、华丽高贵,如紫藤花下的精灵公主,一颦一笑皆可入…

作者头像 李华
网站建设 2026/7/14 13:48:58

13DOF传感器与dsPIC33EP在工业自动化中的高精度定位方案

1. 项目背景与核心需求在工业自动化、无人机控制和机器人导航领域&#xff0c;精确定位与实时交互一直是技术攻关的重点。传统方案往往采用分立式传感器和处理器架构&#xff0c;导致系统复杂度高、数据同步困难&#xff0c;且难以满足毫秒级响应需求。这个项目通过13DOF传感器…

作者头像 李华
网站建设 2026/7/14 13:48:55

【一图胜千言】UART、IIC、SPI、CAN四大协议核心差异与应用选型指南

1. 四大通信协议核心对比图先来看这张对比表格&#xff0c;5秒钟就能抓住关键差异&#xff1a;协议硬件接线通信方式典型速度最大设备数典型应用场景UARTTX/RX/GND异步全双工115.2kbps1对1调试终端、GPS模块I2CSCL/SDA同步半双工100kbps-3.4Mbps理论128个温湿度传感器SPIMOSI/M…

作者头像 李华