需求: 注册:用户名和密码 -> str
python
from pydantic import BaseModel
class User(BaseModel):
username: str
password: str
@app.post("/register")
async def register(user: User):
return user
python 中 BaseModel 在这里有什么用?
回答:
一句话核心答案
BaseModel 是 FastAPI 用来自动接收、校验、格式化 JSON 请求体的核心工具。
它能让你不用手动解析 JSON,直接拿到一个干净、安全、类型正确的对象。
你的代码里,BaseModel 做了 4 件大事
你写的这段:
python
class User(BaseModel):
username: str
password: str
它的作用就是:
1. 自动接收前端传来的 JSON
前端传这样的数据:
json
{
"username": "张三",
"password": "123456"
}
FastAPI 会自动把它转成 User 对象给你用。
2. 自动校验数据类型(非常重要)
如果前端传错了,比如:
json
{
"username": 123, // 数字,不是字符串
"password": true
}
FastAPI 会直接报错:422 格式错误
不用你写任何判断代码!
3. 自动生成接口文档
访问:
text
http://localhost:8000/docs
你会看到:
- /register 接口
- 请求体格式
- 参数类型
- 字段说明
全是 BaseModel 自动生成的!
4. 让你写代码更舒服(智能提示)
在函数里你可以直接写:
python
user.username
user.password
编辑器会自动提示,不会写错单词,不会报错。
如果不用 BaseModel 会怎样?
你必须自己写:
python
@app.post("/register")
async def register(body: dict):
username = body.get("username")
password = body.get("password")
# 自己判断类型
if not isinstance(username, str):
return {"error": "用户名必须是字符串"}
又麻烦又容易错!
超级总结
BaseModel 的作用就是:
✅ 自动接收 JSON
✅ 自动校验数据类型
✅ 自动生成接口文档
✅ 让代码更简洁、更安全
你现在写的这段代码,就是 FastAPI 最标准、最推荐的注册接口写法!