FastAPI 基礎學習(六) Request Body(I)


作者:麥克煎蛋   出處:https://www.cnblogs.com/mazhiyong/ 轉載請保留這段聲明,謝謝!

 

Request Body是從客戶端發送到API端的數據內容。

一、單個Request Body

通過以下幾個簡單環節我們就可以完成對Request Body的處理。

1、導入Pydantic BaseModel

from pydantic import BaseModel

2、創建數據模型

聲明需要的數據模型,並且繼承自BaseModel。

class Item(BaseModel):
    name: str
    description: str = None
    price: float
    tax: float = None

模型屬性均基於標准的Python類型。

注意,與請求參數類似,如果模型屬性有缺省值,那么就意味着它不是必須的,如果缺省值是None,則意味着是可選的;否則,它就是必須的。

3、參數聲明

我們用聲明路徑參數和請求參數同樣的方式來聲明Request Body參數。

@app.post("/items/")
async def create_item(item: Item):
    return item

 

通過以上的幾個環節,FastAPI就實現了以下功能:

(1)、從Request中解析出Body內容,並且輸出格式為JSON。

(2)、如果需要,進行相應的數據類型轉換。

(3)、校驗數據,如果校驗失敗則返回詳細錯誤信息。

(4)、通過聲明的參數對象來接收最終數據內容。

4、使用數據模型

你可以直接訪問數據模型的所有屬性。

from fastapi import FastAPI from pydantic import BaseModel class Item(BaseModel): name: str description: str = None price: float tax: float = None app = FastAPI() @app.post("/items/") async def create_item(item: Item): item_dict = item.dict() if item.tax:  price_with_tax = item.price + item.tax item_dict.update({"price_with_tax": price_with_tax}) return item_dict

實際運行示例如下:

5、同時使用Request Body參數、路徑參數、請求參數

你可以同時聲明Request Body參數、路徑參數、請求參數這幾種不同類型的參數。

FastAPI會自動識別不同類型的參數,並且賦予參數對象正確的數據內容。

from fastapi import FastAPI
from pydantic import BaseModel


class Item(BaseModel):
    name: str
    description: str = None
    price: float
    tax: float = None


app = FastAPI()


@app.put("/items/{item_id}")
async def create_item(item_id: int, item: Item, q: str = None):
    result = {"item_id": item_id, **item.dict()}
    if q:
        result.update({"q": q})
    return result

 

函數參數按照如下的順序進行識別匹配:

(1)、如果這個參數已經在路徑中被聲明過,那么它就是一個路徑參數。

(2)、如果這個參數的類型是單類型的(如str、float、int、bool等),那么它就是一個請求參數。

(3)、如果這個參數的類型是Pydantic數據模型,那么它就被認為是Request Body參數。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM