作者:麥克煎蛋 出處:https://www.cnblogs.com/mazhiyong/ 轉載請保留這段聲明,謝謝!
二、多個Request Body
我們可以同時聲明多個Request Body參數。
from fastapi import FastAPI from pydantic import BaseModel app = FastAPI() class Item(BaseModel): name: str description: str = None price: float tax: float = None class User(BaseModel): username: str full_name: str = None @app.put("/items/{item_id}") async def update_item(*, item_id: int, item: Item, user: User): results = {"item_id": item_id, "item": item, "user": user} return results
這兩個參數(item、user)類型都是Pydantic數據模型。
我們務必要注意,這里參數的名稱就是body里的鍵值,body內容格式如下示例:
{ "item": { "name": "Foo", "description": "The pretender", "price": 42.0, "tax": 3.2 }, "user": { "username": "dave", "full_name": "Dave Grohl" } }
三、嵌入單個Request Body
如果Request Body內容格式如下:
{ "item": { "name": "Foo", "description": "The pretender", "price": 42.0, "tax": 3.2 } }
這里"item"是Request Body內部數據內容的鍵值,那么我們就需要利用Body方法的embed參數,才能正確解析出Request Body內容。
item: Item = Body(..., embed=True)
具體示例如下:
from fastapi import Body, FastAPI from pydantic import BaseModel app = FastAPI() class Item(BaseModel): name: str description: str = None price: float tax: float = None @app.put("/items/{item_id}") async def update_item(*, item_id: int, item: Item = Body(..., embed=True)): results = {"item_id": item_id, "item": item} return results
四、單個數值
對於Request Body里的單個數值,FastAPI提供了便利的操作方法Body。
from fastapi import Body, FastAPI from pydantic import BaseModel app = FastAPI() class Item(BaseModel): name: str description: str = None price: float tax: float = None class User(BaseModel): username: str full_name: str = None @app.put("/items/{item_id}") async def update_item( *, item_id: int, item: Item, user: User, importance: int = Body(...) ): results = {"item_id": item_id, "item": item, "user": user, "importance": importance} return results
Request Body數據格式示例如下:
{ "item": { "name": "Foo", "description": "The pretender", "price": 42.0, "tax": 3.2 }, "user": { "username": "dave", "full_name": "Dave Grohl" }, "importance": 5 }
注意,這里如果沒有Body方法的話,參數importance就只是個請求參數,所以務必注意下。