国产探花免费观看_亚洲丰满少妇自慰呻吟_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模塊,使用過程大致如下:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 丁青县| 花莲市| 建水县| 诏安县| 电白县| 依安县| 阿拉善左旗| 施甸县| 葵青区| 图片| 莱阳市| 东海县| 河北区| 图木舒克市| 汉阴县| 秦安县| 监利县| 界首市| 顺平县| 衡阳市| 和田县| 五大连池市| 图片| 耿马| 泽普县| 中西区| 拉孜县| 株洲县| 重庆市| 龙游县| 松原市| 馆陶县| 桃园市| 察哈| 广安市| 乌兰浩特市| 农安县| 农安县| 垣曲县| 葵青区| 资中县|