FastAPI(16)- 額外的資料型別
阿新 • • 發佈:2022-01-05
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)