1. 程式人生 > 其它 >FastAPI 學習之路(九)請求體有多個引數如何處理?

FastAPI 學習之路(九)請求體有多個引數如何處理?

系列文章:

  FastAPI 學習之路(一)fastapi--高效能web開發框架

  FastAPI 學習之路(二)

  FastAPI 學習之路(三)

  FastAPI 學習之路(四)

  FastAPI 學習之路(五)

FastAPI 學習之路(六)查詢引數,字串的校驗

  FastAPI 學習之路(七)字串的校驗

  FastAPI 學習之路(八)路徑引數和數值的校驗

請求體有多個引數如何處理?

別的不多說,我們先寫一個需求,然後演示下如何展示。

需求:寫一個介面,傳遞以下引數,書本的名稱,描述,價格,打折。
介面返回返回最後的價格

我們去看下程式碼如何實現

from typing import
Optional from fastapi import FastAPI from pydantic import BaseModel app = FastAPI() class Item(BaseModel): name: str description: Optional[str] = None price: float tax: Optional[float] = None @app.put("/items") def update_item(item: Optional[Item]): result={} if item.tax is not
None: total=item.price*item.tax result['price'] = total result['name']=item.name return result result['price'] = item.price result['name'] = item.name return result

那麼我們測試下,最後是否實現了這個功能,當我們輸入所有的引數的時候。

最後是在我們實際的打折上返回的。

那麼我們看下,我們不增加打折如何返回

沒有打折就原價返回了名稱和價格。

如果預設給了None或者其他內容,這個引數就是可以選擇增加或者不增加。但是沒有給預設值的時候,就是必須傳遞的,否則會返回對應的錯誤,我們可以看下。假如我們不傳遞價格。

我們可以看到沒有預設值的引數就是一個必須的。不然介面會返回對應的錯誤。

除了宣告以上單個的,我們還可以宣告多個請求體引數,比如我們可以在之前的需求,增加一個返回,要求返回作者,和作者的朝代。如何實現呢。

from typing import Optional
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
    name: str
    description: Optional[str] = None
    price: float
    tax: Optional[float] = None
class User(BaseModel):
    username: str
    year: str
@app.put("/items")
async def update_item(item: Optional[Item],user:User):
    result={}
    if  item.tax is not None:
        total=item.price*item.tax
        result['price'] = total
        result['name']=item.name
        result['user']=user
        return result
    result['price'] = item.price
    result['name'] = item.name
    result['user']=user
    return result

那麼我們看下介面的請求

當我們增加打折。看下返回結果

我們可以看下介面的返回。

FastAPI將自動對請求中的資料進行轉換,因此item引數將接收指定的內容,user引數也是如此。

我們要想在增加一個鍵,在哪裡出售,但是要作為請求體的另一個鍵進行處理,如何 實現呢

from typing import Optional

from fastapi import FastAPI,Body
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
    name: str
    description: Optional[str] = None
    price: float
    tax: Optional[float] = None
class User(BaseModel):
    username: str
    year: str
@app.put("/items")
async def update_item(item: Optional[Item],user:User,sell:str=Body(...)):
    result={}
    if  item.tax is not None:
        total=item.price*item.tax
        result['price'] = total
        result['name']=item.name
        result['user']=user
        result['sell']=sell
        return result
    result['price'] = item.price
    result['name'] = item.name
    result['user']=user
    result['sell'] = sell
    return result


我們可以看到如下

假如我們把引數放在查詢內,返回錯誤

引數必須放在body內請求。

文章首發在公眾號,歡迎關注。