学习FastAPI,定义模型时使用Pydantic 在其他的web框架中Django或Flask都有相应的表单类用来校验前端数据的合法行在FaskAPI中则用Pydantic来实现。Pydantic 是 FastAPI 的数据守门员你只用声明我想要什么类型的数据、有什么规则剩下的解析、校验、报错、文档全部自动生成。定义模型时一般使用Pydantic的BaseModel的类进行继承。from fastapi import FastAPI from pydantic import BaseModel app FastAPI() # 定义数据模型请求体格式 class User(BaseModel): name: str age: int email: str # 使用模型 app.post(/users/) async def create_user(user: User): # FastAPI 会自动验证 user 的数据 # user.name, user.age, user.email 都是经过校验的 return { message: f用户 {user.name} 创建成功, age: user.age, email: user.email }Pydantic是 Python 生态中最流行的数据验证库它的核心功能可以概括为利用 Python 的类型提示Type Hints在运行时对数据进行校验、转换和序列化。不使用该库则需要自己手写很多校验逻辑。例app.post(/login) async def login(email: str, password: str): # 你得自己写一堆校验逻辑 if not email or not in email: raise HTTPException(400, 邮箱格式错误) if not password or len(password) 6: raise HTTPException(400, 密码太短) ...语法含义BaseModelPydantic 的基类继承它表示这是一个数据模型Pydantic 会自动解析类型注解并生成校验逻辑Annotated[str, Field(...)]Pydantic v2 推荐写法。Annotated是 Python 标准库typing的类型意思是类型str的基础上附加一些元数据。Field(...)就是那些元数据校验规则、描述等Field(...)...Ellipsis表示该字段必填后面跟着的是约束条件min_length、max_length、description等description邮箱生成 API 文档Swagger/OpenAPI时会显示这个说明注在 Pydantic v1 中更常见的写法是email: str Field(..., description邮箱)但这种方式有个副作用——把默认值和类型信息混在了一起。v2 推荐用Annotated将类型和元数据解耦更加清晰。# 定义模型 class Login(BaseModel): # Field的第一个参数为...时代表不能被省略的意思。 email :Annotated[str, Field(..., description邮箱)] password :Annotated[str, Field(..., min_length6, max_length10)] # ❌ 错误Field(...) 不能单独作为类型注解 email: Field(..., description邮箱) # 类型是 Field不对 # ❌ 错误只写 str没有配置 email: str # 可以运行但没有 description、没有显式必填标记 # ✅ 正确Annotated 把两者结合 email: Annotated[str, Field(..., description邮箱)]核心能力主要体现在以下几个方面类型提示驱动的验证你只需要用标准的 Python 类型注解定义一个数据模型继承BaseModelPydantic 就会自动根据这个模型校验数据。比如将age: int定义为整数如果传入字符串thirty就会抛出详细的错误。智能的数据转换它不仅仅是检查类型还会尝试在合理的情况下将数据转换成你定义的类型。例如你可以把字符串123传给一个定义为int的字段Pydantic 会自动将其转换成整数123这在与 API 或配置交互时非常方便。强大的设置管理Settings Management除了验证单个数据Pydantic 还通过BaseSettings提供了一套完整的配置管理方案。它能自动从环境变量、.env文件甚至命令行参数中读取配置并统一转换成你定义的 Python 对象是管理项目配置的“利器”。优秀的性能和生态它的核心验证逻辑由高性能的 Rust 语言编写速度非常快。同时它也是 FastAPI、LangChain、Hugging Face 等热门库的底层依赖每天被下载超过 7000 万次经过了大量实战检验。简单来说Pydantic 通过声明式而非手写大量if语句的方式为 Python 应用的数据安全性和可维护性提供了坚实基础