1. 程式人生 > >lask——裝飾器路由的具體實現

lask——裝飾器路由的具體實現

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字串,以及對應的請求方法和端點,滿足請求條件,呼叫端點對應的檢視函式名。