werkzeug
是乙個python寫成的wsgi
工具集。它遵循wsgi
規範,對伺服器和web應用之間的「中間層」進行了開發,衍生出一系列非常有用的web服務底層模組。
werkzeug庫的routing
模組的主要功能在於url解析。對於wsgi
應用來講,不同的url對應不同的檢視函式,routing
模組則會對請求資訊的url進行解析並匹配,觸發url對應的檢視函式,以此生成乙個響應資訊。routing
模組的解析和匹配功能主要體現在三個類上:rule
、map
和mapadapter
。
rule
類繼承自rulefactory
類。乙個rule
的例項代表乙個url模式,乙個wsgi
應用可以處理很多不同的url模式,這也就是說可以產生很多不同的rule
例項。這些rule
例項最終會作為引數傳遞給map
類,形成乙個包含所有url模式的物件,通過這個物件可以解析並匹配請求對應的檢視函式。
關於rule
類有一些常用的方法:
注意:在對給定的url進行匹配的過程中,會使用一些converters
。關於converters
的資訊後續加以介紹。
通過map
類構造的例項可以儲存所有的url規則,這些規則是rule
類的例項。map
例項可以 通過後續的呼叫和給定的url進行匹配。
關於map
類有一些常用的方法:
mapadapter
類執行url匹配的具體工作。關於mapadapter
類有一些常用的方法:
為了說明routing
模組的工作原理,這裡使用werkzeug
文件中的乙個例子,稍加改動後如下所示:
from werkzeug.serving import run_******1. 設計url模式
設計url模式的過程就是構造rule
例項的過程。上面的例子中我們構造了8個rule
例項,分別對應8個不同的url模式。每個rule
例項還對應乙個endpoint
,這個endpoint
可以和檢視函式進行對應,以便訪問某個url時,可以觸發與之對應的檢視函式。下面的例子展示了endpoint
和檢視函式的對應關係。
from werkzeug.routing import map, rule
defon_index
(request):
return response('hello from the index')
url_map = map([rule('/', endpoint='index')])
views = 複製**
2. 構造map例項
構造map例項時,會呼叫它的add(rulefactory)
方法。這個方法會在map例項和各個rule例項之間建立繫結關係,並通過呼叫rule例項的bind()
方法為每個rule例項生成乙個正規表示式。
例如,對於'/about'
這個url,它對應的正規表示式為:
'^\\|\\/about$'
對於'////'
這個url,它對應的正規表示式為:
'^\\|\\/(?p\\d+)\\/(?p\\d+)\\/(?p\\d+)(?/?)$'
3. 構造mapadapter例項
在設計wsgi
應用時,上述例子通過url_map.bind_to_environ(environ)
構建了乙個mapadapter例項。這個例項將請求的相關資訊和已經建立好的map
例項放在一起,以便進行url匹配。
進行url匹配的過程是通過呼叫mapadapter例項的match()
方法進行的。實質上,這個方法會將請求中的path
傳入到所有rule例項的match(path)
方法中,經過正規表示式的匹配來分析path
是否和某個rule例項匹配。如果匹配則返回對應的endpoint
和其他的引數,這可以作為引數傳入檢視函式。
4. 訪問url可得相關結果
之後,訪問url可以得到相對應的結果。
例如,訪問http://localhost:4000/2017/
,可以得到:
rule points to 'blog/archive' with arguments
訪問http://localhost:4000/2017/3/20/
,可以得到:
rule points to 'blog/archive' with arguments
訪問http://localhost:4000/about
,可以得到:
rule points to 'blog/about_me' with arguments {}
RabbitMQ入門教程 路由(Routing)
繫結 bindings 之前的文章中我們已經建立過bindings,如下 channel.queuebind queue queuename,exchange exchange name,routingkey routing key,arguments null 繫結 bindings 是指交換機 ...
WERKZEUG之WSGI閱讀筆記
pep3333指出,wsgi web server gateway inte ce 是web伺服器和web框架或web應用之間建立的一種簡單通用的介面規範。有了wsgi這份介面規範,在web開發的過程中,能更加自由的選擇伺服器端和框架 在伺服器端和框架的開發過程能夠分離開來,不用過多的考慮雙方具體的...
Flask學習記錄之使用Werkzeug雜湊密碼
資料庫中直接存放明文密碼是很危險的,werkzeug庫中的security能夠方便的實現雜湊密碼的計算 security庫中 generate password hash password,method.函式將原始密碼作為輸入,以字串形式輸出密碼的雜湊值 check password hash ha...