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

发布时间:2026/7/14 13:54:30
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 格式。同时你可以利用模型的exclude、include等参数精细控制哪些字段出现在最终的响应中。我们先看一个数据验证实例class Item(BaseModel): name: str price: float # 可选字段默认值为 None tax: float | None None ​ # 在装饰器中通过 response_model 指定 app.post(/create_item/, response_modelItem) 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_modelUserOut) async def create_user(user: UserIn): return user然后打开浏览器访问http://127.0.0.1:8000/docs进行测试异常错误处理 (HTTPException) 响应状态码 (status_code)在 FastAPI 中HTTPException是一个内置的异常类用于在 API 处理过程中主动抛出 HTTP 错误响应。当你的业务逻辑遇到问题如资源不存在、权限不足、参数无效等时你可以抛出 HTTPExceptionFastAPI 会捕获它并自动将其转换为符合 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_code400, detailID必须大于0) # 模拟查询假设只有 id1 存在 if item_id ! 1: raise HTTPException(status_code404, detailItem项不存在) return {item_id: item_id, name: Sample Item}参数说明status_codeHTTP 状态码如 400、404、403、500 等可以是整数或fastapi.status中定义的常量推荐使用。detail错误描述信息可以是字符串或可转为 JSON 的对象如字典、列表。headers可选可以添加自定义响应头。然后打开浏览器访问http://127.0.0.1:8000/docs进行测试