FastAPI(16)- 额外的数据类型
FastAPI(16)- 额外的数据类型
常见的数据类型
- int
- float
- str
- bool
但 FastAPI 支持使用更复杂的数据类型
仍然能得到 FastAPI 的支持
- IDE 智能提示
- 请求数据的数据类型转换
- 响应数据的数据类型转换
- 数据验证
- 自动注释和文档
复杂的数据类型
UUID
- 常见的唯一标识符
- str 类型
datetime.datetime
- Python 的 datetime.datetime
- str 类型
- 栗子:2008-09-15T15:53:00+05:00
datetime.date
- Python 的 datetime.date
- str 类型
- 栗子:2008-09-15
datetime.time
- Python 的 datetime.time
- str 类型
- 栗子:15:53:00.003
datetime.timedelta
- Python 的 datetime.timedelta
- float 类型
- 表示秒数
frozenset
- set 类型
- 在请求中,将读取一个列表,消除重复项并将其转换为一个集合
- 在响应中,集合将被转换为列表
- 会在 Schema 中加一个标识 uniqueItems,表示 set 里面的值是唯一的
bytes
- Python 标准类型 bytes
- str 类型
- 生成 Schema 会指定它为一个带有二进制格式的 str
Decimal
- Python 标准类型十进制
- float 类型
重点
- FastAPI 不只是有以上的复杂数据类型,更多的数据类型可以看 Pydantic Types
- 只要 Pydantic 有的,FastAPI 都支持
复杂数据类型的栗子
#!usr/bin/env python
# -*- coding:utf-8 _*-
"""
# author: 小菠萝测试笔记
# blog: https://www.cnblogs.com/poloyy/
# time: 2021/9/21 1:58 下午
# file: 14_extra.py
"""
import uuid
from datetime import datetime, time, timedelta
from decimal import Decimal
from typing import Optional
from uuid import UUID
import uvicorn
from fastapi import Body, FastAPI
app = FastAPI()
@app.put("/items/{item_id}")
async def read_items(
item_id: UUID,
start_datetime: Optional[datetime] = Body(None),
end_datetime: Optional[datetime] = Body(None),
repeat_at: Optional[time] = Body(None),
process_after: Optional[timedelta] = Body(None),
address: Optional[frozenset] = Body(None),
computer: Optional[bytes] = Body(None),
age: Optional[Decimal] = Body(None),
):
start_process = start_datetime + process_after
duration = end_datetime - start_process
return {
"item_id": item_id,
"start_datetime": start_datetime,
"end_datetime": end_datetime,
"repeat_at": repeat_at,
"process_after": process_after,
"start_process": start_process,
"duration": duration,
"address": address,
"computer": computer,
"age": age,
}
if __name__ == "__main__":
print(uuid.uuid1())
uvicorn.run(app="14_extra:app", host="127.0.0.1", port=8080, reload=True, debug=True)
正确传参的请求结果
校验错误的请求结果
查看 Swagger API 文档