0%

FastAPI自学教程(13)- 额外数据类型

1. 基础数据类型扩展

1
2
3
4
5
6
7
8
9
10
from datetime import datetime, time, timedelta
from uuid import UUID

@app.put("/items/{item_id}")
async def read_items(
item_id: UUID,
start_datetime: datetime,
end_datetime: datetime,
process_after: timedelta
):
  • UUID:通用唯一标识符,在请求/响应中以字符串形式处理
  • datetime:支持datetime.datetime(ISO 8601格式字符串)、datetime.date(日期字符串)、datetime.time(时间字符串)
  • timedelta:时间间隔类型,响应中转换为总秒数(float类型)

2. 集合与二进制类型

1
2
3
4
5
from pydantic import BaseModel

class Model(BaseModel):
address: frozenset
computer: bytes
  • frozenset:请求时自动去重转换为集合,响应时转为列表
  • bytes:二进制数据,在请求/响应中按base64字符串处理
  • Decimal:高精度数值类型,处理方式与float相同

3. 类型特性说明

1
2
3
@app.get("/unique-items")
def get_unique(items: list[str]) -> set[str]:
return set(items)
  • 自动数据转换:列表↔集合转换时自动处理重复项
  • 模式验证:生成JSON Schema时自动添加uniqueItems约束
  • 文档支持:Swagger UI自动展示各类型的示例格式

4. 使用注意事项

  • 类型优先级:复杂类型会覆盖基础类型验证规则(如datetime优先于str
  • 兼容性要求:客户端需按指定格式传递数据(如时间必须符合ISO 8601)
  • 精度处理:Decimal类型建议配合round()使用避免浮点误差