fastapi
特點:編輯器支援
資料格式自動轉換
資料格式自動校驗
自動生成註解和文件
如果這個引數已經再路徑中被宣告過,那麼它就是乙個請求引數。
如果這個引數的型別是單型別(如str,float, int, bool)等,那麼它就是乙個請求引數。
如果這個引數的型別是pydantic資料模型,那麼它就被認為是request body引數。
item : item = body(… , embed=true)
不帶預設值的引數應該放在前面,如過把帶了預設值的引數放在不帶預設值的前面,python 會發出執行警告。因此在實際使用時,我們應該把不帶預設值的引數放在前面,無論這個引數是路徑引數還是請求引數。fast api根據引數名稱、型別以及宣告方法來識別具體引數的意義,並不關心引數順序。
引數排序技巧,通過傳遞*作為第乙個引數,就解決了上面引數順序的問題。這是因為,python 不會對*做任何操作。但通過識別*,python知道後面的引數都是關鍵字引數(鍵值對),通常也叫kwargs,無論引數是否有預設值。
資料型別引數的校驗,借助query、path等模組你可以對字串型別引數的校驗,同樣的,也可以是實現數字型別引數的校驗功能。
gt : 大於(greater than)
ge: 大於或等於 (greater than or equal)
lt: 小於(less than)
le: 小於或等於(less than or equal)
數字校驗也同樣適用於float型別的引數。
pydantic模型的附加資訊。也可以通過field的模組,為pydantic模組新增附加資訊。
fastapi利用response模型實現以下功能:
將輸出資料轉換成宣告的response模型;
將資料進行校驗
生成自動化文件
(最重要)限制輸出資料只能是所宣告的response模型。
例如,當我們設定多個輸出模型的示例,在路徑操作中,我們宣告的response模型可以通過指定,限制輸出資料。
常見的錯誤資訊為:
這些錯誤的http狀態碼一般為400錯誤(400-499)
丟擲異常
在**中丟擲異常httpexception.
fastapi有一些預設的異常處理器,當我們丟擲httpexception異常或者請求有非法資料的時候,這些處理器負責返回預設的json結果。我們可以重寫這些異常處理器。
中介軟體實際上是乙個函式,在每個request處理之前被呼叫,同時又在每個response返回之前被呼叫。
首先接受訪問過來的request
然後針對request或其他功能執行自定義邏輯
傳遞request給應用程式繼續處理
接受應用所產生的response
然後針對response或其他功能執行自定義邏輯
返回response
後台任務(如果有)會在中介軟體執行完成後才會執行
中介軟體接受兩個引數:
1. request
2.函式call_next:傳遞request給相應的路徑操作,然後從路徑操作中返回response。我們可以在response返回之前對其進行更改。
我們可以在呼叫函式call_next之前,即任何路徑操作接收到request之前,新增一些自定義邏輯。
也可以在response產生之後,新增一些自定義邏輯,如上所示的新增自定義頭資訊。
其中,第乙個引數是中介軟體類,同時還支援中間間的其他附加資訊。
gzipmiddleware支援 minimum_size引數:當返回結果大大小小指定值時不啟用壓縮。
"依賴注入"非常適用於以下使用場景:
業務邏輯復用
共享資料庫鏈結
安全機制、許可權校驗、角色管理等等
其他使用場景
所有上述使用場景,借助於「依賴注入」可以明確提高**復用,減少**重複
FastAPI學習 2 fastapi引數詳解
1.檢視fastapi原始碼 引數如下 from fastapi import fastapi from starlette.responses import jsonresponse 此型別不可少 from starlette.routing import route request引數不可少 a...
FastAPI學習 RequestBody請求體
get操作不能使用requestbody,post put delete patch可以。請求體使用前,必須要引入pydantic庫中的basemodel類進行宣告,傳入前建立相應的資料模型 from fastapi import fastapi from pydantic import basem...
fastapi 實戰 綜述
本系列主講終端部分 訂單分發和完成 主要功能 從分發平台接收訂單 將訂單分發給各使用者完成任務 雖然整個專案很簡單,但是會涉及比較全面的知識,包括 快取 定時任務 佇列任務 orm使用 後台任務。一系列的工具基本上是fastapi的web開發所需的全部。涉及知識棧 準備階段為購買伺服器,搭建k8s,...