FastAPI 學習之路(三)


系列文章:

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

  FastAPI 學習之路(二)

 之前的文章分享了如何去創建一個簡單的路徑的請求。那么我們這次分享的如何在請求路徑中,增加參數。

  我們還是在之前的請求中改造

@app.get("/")
def root():
    return {"message": "Hello World"}

  那么如何讓它帶參數呢,其實很簡單

@app.get("/{name}")
def root(name):
    return {"name": name}

  

 那么我們去請求下,看下是否可以帶參數,我們去帶一個name。看下借口返回什么。

 

 

   那么我們攜帶別的路徑參數呢。

 

 

 

   同樣是可以返回對應的數據的。

     如果我們不帶這個路徑參數,會返回什么呢

 

 

 假如,我們想要約定name的數據是int類型,怎么約定呢

from fastapi import FastAPI
app = FastAPI()
@app.get("/{name}")
def root(name:int):
    return {"name": name}

   很簡單的方式,就實現了如何定義路徑參數為int類型,那么我們看下,如果我們傳遞的不是int類型,接口給我們返回的結果是什么

 

 

    那么我們攜帶int類型的參數呢

 

 

 

參數可以正確返回我們想要的數據。不管是int類型的輸入,還是非int類型的輸入,都會有對應輸出,FastAPI 通過上面的類型聲明提供了對請求的自動解析。

        當你打開對應的文檔,你會發現文檔上面已經把對應參數的需要的類型給增加上去了。

 

 

 我們在文檔中調試下。當你輸入的類型不正確的時候,默認是無法點擊Execute的。

 

 

 只有輸入正確格式的路徑參數才會請求

 

 

 假設你有另外一個路徑參數one,如下

from fastapi import FastAPI
app = FastAPI()
@app.get("/{name}")
def root(name:int):
    return {"name": name}
@app.get("/one")
def root():
    return {"one": '雷子歡迎你'}

  

  這個時候,你說請求one應該返回什么?

        正常我們想着應該返回{"one": '雷子歡迎你'},結果卻是

 

 

 這是為什么呢,其實呢,這是因為fastapi會按照路徑的順序匹配,當你輸入one,默認匹配的是第一個帶參數的路徑,那么我們現在調整下

from fastapi import FastAPI
app = FastAPI()
@app.get("/one")
def root():
    return {"one": '雷子歡迎你'}
@app.get("/{name}")
def root(name:int):
    return {"name": name}

  這樣我們再請求的時候,就會發生了變化

 

 

 

所以我們在編寫代碼的時候,一定要注意,相同匹配的時候,默認只會按照順序匹配。

        我們在之前的帶參數路徑請求的函數中,我們有這樣的需求,我們要求只能輸入我們規定的數據,才能返回對應的數據。

        這個時候呢,推薦用枚舉,我們看下如何實現的。

from fastapi import FastAPI
from enum import Enum
app = FastAPI()
class ModelName(str, Enum):
    beijing = "1"
    shanghai = "2"
@app.get("/{name}")
def root(name:ModelName):
    if name==ModelName.beijing:
        return "北京歡迎你"
    if name==ModelName.shanghai:
        return  "您好上海"

  我們看下接口如何返回

 

 

   我們看下接口文檔中如何展示

 

 

 

  默認我們只能限定輸入這兩個。其他的在接口文檔沒法輸入,在接口請求中會返回錯誤信息。fastapi默認會給你處理一些異常。返回比較好處理的數據。

 

  文章首發在公眾號:

     

  

 

 

  


免責聲明!

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



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