請求體 - 嵌套模型
使用 FastAPI,你可以很隨意的實現模型的嵌套、定義、校驗、記錄文檔,并使用任意深度嵌套的模型,這其實都是FastAPI的核心模塊P一單提成進行做的。。
List 字段
from fastapi import FastAPI
from pydantic import BaseModelapp = FastAPI()class Item(BaseModel):name: strdescription: str | None = Noneprice: floattax: float | None = Nonetags: list = []@app.put("/items/{item_id}")
async def update_item(item_id: int, item: Item):results = {"item_id": item_id, "item": item}return results
我們來看下效果
現在tags,可以隨便填寫任意類型的數據,如果我們規定只能填寫字符串,只需要稍微改變一下代碼
tags: List[str] = []
現在來看下效果
Set 類型
set 類型與list的區別我們都知道,就是數據不能重復。改起來也是相當的容易,直接把List換成Set即可
tags: set[str] = set()
這樣,即使你收到帶有重復數據的請求,這些數據也會被轉換為一組唯一項。
而且,每當你輸出該數據時,即使源數據有重復,它們也將作為一組唯一項輸出。
嵌套模型
直接來看一個深度較大的嵌套代碼示例吧
from typing import Unionfrom fastapi import FastAPI
from pydantic import BaseModel, HttpUrlapp = FastAPI()class Team(BaseModel):# 球隊名稱name: str# 所屬區域:東部、西部area: strclass Player(BaseModel):# 所屬球隊team: Team# 球員名稱name: strclass Hobby(BaseModel):name: strdescription: Union[str, None] = None# 分類category: strtax: Union[float, None] = None# 喜歡的球隊名稱teams: set[str] = set()# 喜歡的球員players: Union[list[Player], None] = Noneclass Fan(BaseModel):"""球迷"""# 球迷姓名name: strdescription: Union[str, None] = None# 年齡age: int# 愛好hobby: list[Hobby]@app.post("/fan/")
async def create_fan(fan: Fan):return fan
看看效果
純列表請求體
官網的示例代碼
from fastapi import FastAPI
from pydantic import BaseModel, HttpUrlapp = FastAPI()class Image(BaseModel):url: HttpUrlname: str@app.post("/images/multiple/")
async def create_multiple_images(images: list[Image]):return images
總結
總結一下,FastAPI通過利用Python類型提示和Pydantic庫的強大功能,使得處理嵌套模型變得簡單易用。只需要定義好你的數據模型,FastAPI就能自動處理請求體的解析和驗證,大大提高了開發效率。而實際上,在工作中 ,用到這種寫法并不多。