Django之(URL)路由系統

2022-07-23 20:24:26 字數 4055 閱讀 5411

簡而言之,django的路由系統作用就是使views裡面處理資料的函式與請求的url建立對映關係。使請求到來之後,根據urls.py裡的關係條目,去查詢到與請求對應的處理方法,從而返回給客戶端http頁面資料

django 專案中的url規則定義放在project 的urls.py目錄下,

預設如下:

fromdjango.conf.urlsimporturlfromdjango.contribimportadmin

urlpatterns = [

url(r'^admin/', admin.site.urls),

]

url()函式可以傳遞4個引數,其中2個是必須的:regex和view,以及2個可選的引數:kwargs和name。下面是具體的解釋:

如果你想深入研究正規表示式,可以讀一些相關的書籍或專論,但是在django的實踐中,你不需要多高深的正規表示式知識。

效能注釋:正規表示式會進行預先編譯當urlconf模組載入的時候,因此它的匹配搜尋速度非常快,你通常感覺不到。

使用者訪問 然後後端使用index()函式處理

urls.py

from django.conf.urls import include, url

from django.contrib import admin

urlpatterns = [

url(r'^admin/', admin.site.urls),

url(r'^index/$', views.index),

]

2、在urls.py裡匯入views

3、在urlpatterns裡寫入一條url與處理函式的l對映關係

4、url對映一般是一條正規表示式,「^」 字串的開始,「$「 字串的結束

5、當寫成\^$不輸入任何url時不會在返回黃頁,而是返回後面函式裡對應的頁面。一般這一條會寫在url的最後。如

可以使用正則來匹配url,將一組url使用一條對映搞定

urlpatterns = [

url(r'^host/(\d+)$', views.host),

url(r'^host_list/(\d+)/(\d+)$', views.host_list),

]

\^host/(\d+)$

相對應的url是: 」 (\d+)是匹配任意的數字,在分頁時靈活運用。

在views.host中需要指定乙個形式引數來接受(\d+)\$ 的值

相對應的url是: 」匹配到的數字會以引數的形式按照順序傳遞給views裡面相對應的函式

在views.host_list中需要指定兩個形式引數,注意:此引數的順序嚴格按照url中匹配的順序

利用正規表示式的分組方法,將url以引數的形式傳遞到函式,可以不按順序排列

urlpatterns = [ 

url(r'^user_list/(?p\d+)/(?p\d+)$',views.user_list),

](?p\d+)

正規表示式的分組,相當於乙個字典, key=v1, value=\d+。

然後將此引數傳遞到views裡對應的函式,可以不按照順序

引數v1 = (?p\d+)

引數v2 = (?p\d+)

from django.conf.urls import include, url

from django.contrib import admin

urlpatterns = [

]

from django.conf.urls import include, url

urlpatterns = [

url(r'index/$', views.index),

]

在urls.py裡定義分類正規表示式

from django.conf.urls import patterns, include, url

from django.contrib import admin

from dynamicrouter.activator import process

urlpatterns = patterns('',

# examples:

# url(r'^$', 'dynamicrouter.views.home', name='home'),

# url(r'^blog/', include('blog.urls')),

url(r'^admin/', include(admin.site.urls)),

)

在同目錄下建立activater.py

'''接收所有匹配url的請求,根據請求url中的引數,通過反射動態指定view中的方法'''

function = kwargs.get('function',none)

try:

funcobj = getattr(viewobj, function)

#執行view.py中的函式,並獲取其返回值

result = funcobj(request,kwargs)

except (importerror,attributeerror),e:

#匯入失敗時,自定義404錯誤

#**執行異常時,自動跳轉到指定頁面

return result

所謂fbv和cbv 是指url 和view的對應關係

上述都是fbv的方式。下面對cbv進行說明:

url(r'^cbv',views.cbvtest.as_view()),

classcbvtest(view):

defdispatch(self, request, *args, **kwargs):

print("類似裝飾器:before")

result = super(cbvtest, self).dispatch(request, *args, **kwargs)

print("類似裝飾器:after")

return result

defget(self, request): # 定義get方法,get請求執行這個方法

defpost(self, request): # 定義post方法,post請求執行這個方法

Django基礎二之URL路由系統

基本格式 from django.conf.urls import url 迴圈urlpatterns,找到對應的函式執行,匹配上乙個路徑就找到對應的函式執行,就不再往下迴圈了,並給函式傳乙個引數request,就是請求資訊的所有內容 urlpatterns url 正規表示式,views檢視函式,...

Django的路由系統 URL

基本格式 from django.conf.urls import url urlpatterns url 正規表示式,views檢視,引數,別名 django 2.0版本的路由系統 from django.urls import path,re path urlpatterns path arti...

Django的url路由系統簡介

from django.conf.urls import url from django.contrib import admin urlpatterns url r admin admin.site.urls from django.conf.urls import url from django...