1. 模型分离场景
1 | from pydantic import BaseModel, EmailStr |
- 输入/输出分离:避免密码等敏感字段通过响应泄露
- 职责划分:输入模型处理原始数据,数据库模型处理加密数据,输出模型控制可见字段
- 安全警告:禁止存储明文密码,必须使用安全哈希(如
bcrypt)
2. 模型转换技巧
1 | def fake_save_user(user_in: UserIn): |
.dict()方法:将Pydantic对象转为字典,支持字段过滤- 双星号解包:
UserInDB(**user_dict)实现字典到模型的快速转换 - 增量更新:可在解包后追加新字段(如
hashed_password)
3. 安全哈希处理
1 | def fake_password_hasher(raw_password: str): |
- 哈希过程应在服务端完成,客户端不参与加密逻辑
- 推荐库:
passlib+bcrypt组合实现安全哈希 - 响应模型自动过滤
hashed_password字段,实现数据脱敏
4. 响应模型配置
1 |
|
response_model控制最终输出结构,与数据库模型隔离- 支持嵌套模型:如
response_model=List[UserOut] - 自动文档生成:Swagger UI展示过滤后的响应结构
5. 多版本兼容性
1 | # Python 3.8+ 写法 |
- 可选字段声明:不同Python版本的类型注解差异
- 向后兼容:推荐使用
Annotated注解方式 - 统一校验规则:不同版本保持相同的数据验证逻辑
注意事项:
- 模型继承可复用公共字段(如创建
BaseUser模型) - 使用
model_config配置额外字段处理策略(如extra="forbid") - 通过
alias_generator实现字段名自动转换 - 生产环境应使用真正的密码哈希算法(如Argon2)