lask——裝飾器路由的具體實現
阿新 • • 發佈:2018-11-10
Flask有兩大核心:Werkzeug和Jinja2 - Werkzeug實現路由、除錯和Web伺服器閘道器介面 - Jinja2實現了模板。 Werkzeug是一個遵循WSGI協議的python函式庫 - 其內部實現了很多Web框架底層的東西,比如request和response物件; - 與WSGI規範的相容;支援Unicode; - 支援基本的會話管理和簽名Cookie; - 整合URL請求路由等。 Werkzeug庫的 routing 模組負責實現 URL 解析。不同的 URL 對應不同的檢視函式,routing模組會對請求資訊的URL進行解析,匹配到URL對應的檢視函式,執行該函式以此生成一個響應資訊。 routing模組內部有: Rule類 用來構造不同的URL模式的物件,路由URL規則 Map類 儲存所有的URL規則和一些配置引數 BaseConverter的子類 負責定義匹配規則 MapAdapter類 負責協調Rule做具體的匹配的工作
裝飾器路由實現總結
裝飾器路由是通過三個類實現的:Rule、Map、Mapadapter. 1.程式例項app通過app呼叫route方法, 內部使用了add_url_rule方法,該方法通過呼叫url_rule_class方法,把url和method和endpoint儲存在Rule類的物件中,端點即檢視函式名的字串形式。 2.在add_url_rule方法中,flask是通過url_map.add方法,把滅個Rule類的物件,儲存在Map容器,即url_app. 3.在MapAdapter類中,通過例項化match方法從Map容器中,拿到每個Rule類物件,通過正則匹配每個url字串,以及對應的請求方法和端點,滿足請求條件,呼叫端點對應的檢視函式名。