1. 程式人生 > 其它 >FastAPI(16)- 額外的資料型別

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 文件