在添加 APIRoute 節點時,會對endpoint進行解析,生成 依賴樹 , get_dependant 便是解析出endpoint的依賴樹的函數。
這部分在之前源碼解析中講過,但是當時的理解並不深刻。這次讓我們來認真剖析這部分
get_dependant 不止被endpoint使用,其依賴項和子依賴都會使用,其為遞歸函數。
開頭生成壹個 Dependant節點對象 ,等待下面加工,最終被返回。其形成的是壹個 樹狀結構 。
接下來把該節點的參數都抓出來,逐個分析。
首先判斷是否為 Depends() 項,如果是,則生成子依賴。下面是生成子依賴的流程。
拿出Depends中的依賴內容,如果沒有就用註解來充當。即 user: User = Depends() 這種形式可以被允許。
接下來是對安全相關的處理。我們可以看到,中間又調用了 get_dependant ,參數包含了 name 和 security_scopes 。endpoint的根節點傳參不包含這兩項。
如果不是 Depends 參數,則首先默認當成查詢參數query,並生成ModelField字段。
如果其為路徑參數,則重新生成ModelField字段。再整合到dependant的參數列表中
不是路徑參數,但是標準的查詢參數
Query()和Header()兩種情況
當上述條件都不滿足,則可以斷言為Body()字段。
就此,壹個APIRoute的依賴樹便生成了
下章說說如何使用依賴樹