Pydantic是 FastAPI 用来"收"和"回"数据的格式说明书。
我们在写接口时,客户端会:
-
"传数据"给你(输入),比如注册/登录时提交用户名和密码。
-
"拿数据"回去(输出),比如你登录成功后返回 JWT 令牌。
👉 那这些数据怎么写?要哪些字段?什么类型?有没有格式限制?
Pydantic 模型就是用来定义这些数据格式的。
📥 举个例子:用户注册
你写了一个注册接口 /register
,用户传来这个 JSON:
{
"username": "alice",
"password": "123456"
}
你需要验证:
-
有没有
username
字段?它是不是字符串? -
password
有没有?是不是字符串?
👉 Pydantic 就是干这个活的!
我们用 UserCreate
模型定义这个请求体结构:
class UserCreate(BaseModel):
username: str
password: str
FastAPI 自动把用户提交的数据拿去套这个模型检查 。如果不符合(比如 password 是数字、username 没填),会直接返回错误,不会走到数据库或后续逻辑,保证你收到的就是干净合法的数据。
📤 举个例子:登录响应
你登录成功了,要给客户端返回 JWT 令牌。你希望格式是这样的:
{
"access_token": "xxxxx",
"token_type": "bearer"
}
我们用这个模型描述这个结构:
class Token(BaseModel):
access_token: str
token_type: str
FastAPI 自动会把你写在返回值里的字典转成这个格式,客户端拿回的 JSON 就规范了。
🧩 Pydantic 模型 = 两件事:
模型名 | 干的事(请求) | 干的事(响应) |
---|---|---|
UserCreate |
验证用户提交的数据是否合法 | 不用于响应 |
Token |
不用于请求 | 定义你返回给用户的令牌格式 |
🔄 总结一句话
你可以把 Pydantic 理解成"接口数据说明书"。
-
当别人调用你的接口时,FastAPI 用它来帮你检查数据合法性 ✅
-
当你返回数据给别人时,FastAPI 用它来帮你自动生成标准 JSON 📦