国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python探索之URL Dispatcher實例詳解

2020-02-16 10:31:03
字體:
來源:轉載
供稿:網友

URL dispatcher簡單點理解就是根據URL,將請求分發到相應的方法中去處理,它是對URL和View的一個映射,它的實現其實也很簡單,就是一個正則匹配的過程,事先定義好正則表達式和該正則表達式對應的view方法,如果請求的URL符合這個正則表達式,那么就分發這個請求到這個view方法中。

有了這個base,我們先拋出幾個問題,提前思考一下:

這個映射定義在哪里?當映射很多時,如果有效的組織?

URL中的參數怎么獲取,怎么傳給view方法?

如何在view或者是template中反解出URL?

好,先來看一個簡單的例子:

from django.conf.urls import patterns, url, includeurlpatterns = patterns('',  url(r'^articles/2003/$', 'news.views.special_case_2003'),  url(r'^articles/(/d{4})/$', 'news.views.year_archive'),)urlpatterns += patterns('',  url(r'^articles/(?P<year>/d{4})/(?P<month>/d{2})/$', 'news.views.month_archive'),  url(r'model/', include('model_test.urls')),)

這段代碼就是一個URL Dispatcher的例子,它在一個單獨的python模塊定義,Django中管這個模塊叫做URLconf,其實,就是通過python代碼方式實現的配置文件,在這個配置中定義了URL路徑和對應的處理方法之間的映射。在Django中,是通過“樹”的結構來管理URLconf之間的關系的,在Django中的主配置文件中,有一個叫做ROOT_URL_CONF的配置項,就是用來指定根URLconf,從根URLconf開始,逐條進行匹配,直到找到匹配項為止,這就是我們上面提到的第一個問題的答案,下面還會再仔細剖析。

在上面例子中,我們可以看到有3個方法:patterns, url, include。url方法構建了一個URL到View方法的映射關系對象,patterns將這些映射關系對象組織成為一個python的列表,那include是做什么的呢?它就是我們上面說到的“樹”結構關系的聯系者,include會關聯其他的URLconf到本URLconf,也就是說include關聯的是孩子節點。整個URL dispatcher體系,就是由這三個方法構建起來的,下面我們重點來介紹這三個方法,了解了這三個方法,整個URL映射機制就會非常清楚了。

def patterns(prefix, *args):  passdef url(regex, view, kwargs=None, name=None, prefix=''):  passdef include(arg, namespace=None, app_name=None):  pass

url()

先來看下最重要的url()方法。第一個參數regex是代表URL的正則表達式,第二個參數指定了和該正則表達式映射的View,此外,還可以通過kwargs參數,給view方法指定默認的kwargs參數,還有name參數,用來命名該URL,主要用在URL反解中,至于prefix用處不大,不解釋。

url()方法最終構造了一個對象,我們姑且叫它URL映射對象,當第一次訪問這個對象去匹配URL時,它會把這個對象中的正則表達式編譯一次,然后保存在該對象中,所以以后再次匹配時,就會很快,不會重復編譯該正則表達式了。在這里正則匹配其實就是用就是python的re模塊,使用過程大致如下:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 谢通门县| 安福县| 邮箱| 太和县| 皮山县| 台北县| 汉寿县| 宜丰县| 镶黄旗| 桑日县| 兖州市| 高阳县| 衡山县| 本溪| 金寨县| 海原县| 北票市| 新民市| 磐安县| 临泉县| 杂多县| 工布江达县| 北流市| 巴东县| 天津市| 望奎县| 洪洞县| 乌审旗| 丰都县| 三河市| 大足县| 沙坪坝区| 庆元县| 长泰县| 翁牛特旗| 麻栗坡县| 屯昌县| 扎鲁特旗| 佛山市| 乌鲁木齐市| 台南县|