Werkzeug 庫 routing 模組簡析

2021-09-24 06:41:41 字數 3679 閱讀 9061

werkzeug是乙個python寫成的wsgi工具集。它遵循wsgi規範,對伺服器和web應用之間的「中間層」進行了開發,衍生出一系列非常有用的web服務底層模組。

werkzeug庫的routing模組的主要功能在於url解析。對於wsgi應用來講,不同的url對應不同的檢視函式,routing模組則會對請求資訊的url進行解析並匹配,觸發url對應的檢視函式,以此生成乙個響應資訊。routing模組的解析和匹配功能主要體現在三個類上:rulemapmapadapter

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...