系列文章:
FastAPI 學習之路(一)fastapi--高性能web開發框架
之前的文章分享了如何去創建一個簡單的路徑的請求。那么我們這次分享的如何在請求路徑中,增加參數。
我們還是在之前的請求中改造
@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默認會給你處理一些異常。返回比較好處理的數據。
文章首發在公眾號: