django路由系統及分發路由的本質

2022-04-10 18:16:52 字數 2335 閱讀 6556

當我們啟動乙個django專案後,想要通過瀏覽器訪問到django專案中的資源

就需要在django中的urls專案中進行路由配置

urlpatterns =[

url(r

'^admin/

', admin.site.urls),

url(r

'^test/

', test1),

]

這樣就可以在瀏覽器訪問到jango中的函式

然而在這個urls檔案開頭注釋中,就已經告訴了我們url後面可以跟以下三種

function views

views

2. add a url to urlpatterns: url(r'

^$', views.home, name='

home')

class-based views

home

2. add a url to urlpatterns: url(r'

^$', home.as_view(), name='

home')

including another urlconf

1. import the include() function: from django.conf.urls import

url, include

2. add a url to urlpatterns: url(r'

^blog/

', include('

blog.urls

'))

我們又了解到,只有當一條路由最後匹配到乙個函式之後,這條路由才算結束

上面的第一種就是直接跟函式,表示一條路由的終止

第二種跟的是類,呼叫了as_view()的方法,我們可以看一下as_view方法幫我們實現了什麼

函式加括號優先順序最高,會優先執行

首先,走了as_view的類繫結方法

然後在as_view中生成了乙個閉包函式view,在該函式中把類例項化長生物件,並把dispatch方法的結果返出來

然後as_view的返回值其實這個view函式物件,所以這種方法的本質還是跟的函式

寫法: 通過include把以及路由分發下去

通過以上的分析我們知道,include幫我們幹的事情其實是匯入字串寫的模組,並以元組的形式返回

這樣我們大致可以理解為,他把我們的(模組物件,none,none) 轉換成了(列表,none,none)

確實就是如此,這也是我們路由分發的本質

urlpatterns =[

url(r

'^test/

', ([ #

這裡是分一級路由

url(r'

^test_1

', ([ #

這是分的二級路由,我們可以通過這種方式無限往下分

url(r'

^test_1_1

', test_1_1),

url(r

'^test_1_2

', test_1_2)

],none, none)),

url(r

'^test_2

', test_2),

],none, none)),

]

注意: 只有當路由匹配後面跟的是函式物件時,這條路由才算結束,否則如果是(,none,none)這種,接著往下分,往下找。

Django 路由分發

django 路由分發 當乙個url請求過來之後 1 先到專案主目錄下的urls內。一級路由 主目錄urls內引入include from django.conf.urls import url,include urlpatterns url r cmdb include url r monitor...

Django路由分發

1.路由匹配,urls.py中 url r testadd views.testadd 匹配規則 從上到下只要正規表示式匹配成功,就不會往下匹配了 get請求的傳參方式?無名分組 url r test d views.test 會把括號中匹配的數字當成位置引數傳給檢視函式 有名分組 url r te...

Django的路由系統01 路由分發

範例 from django.conf.urls import url from django.contrib import admin urlpatterns url r admin admin.site.urls url r publisher list views.publist.as vie...