W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
當(dāng)一個(gè)用戶請(qǐng)求 Django 站點(diǎn)的一個(gè)頁面,下面是 Django 系統(tǒng)決定執(zhí)行哪個(gè) Python 代碼使用的算法:
1.Django 確定使用根 ?URLconf
?模塊。通常,這是 ?ROOT_URLCONF
?設(shè)置的值,但如果傳入 ?HttpRequest
?對(duì)象擁有 ?urlconf
?屬性(通過中間件設(shè)置),它的值將被用來代替 ?ROOT_URLCONF
?設(shè)置。
2.Django 加載該 Python 模塊并尋找可用的 ?urlpatterns
?。它是 ?django.urls.path()
? 和(或) ?django.urls.re_path()
? 實(shí)例的序列(?sequence
?)。
3.Django 會(huì)按順序遍歷每個(gè) URL 模式,然后會(huì)在所請(qǐng)求的URL匹配到第一個(gè)模式后停止,并與 ?path_info
?匹配。
4.一旦有 URL 匹配成功,Djagno 導(dǎo)入并調(diào)用相關(guān)的視圖,這個(gè)視圖是一個(gè)Python 函數(shù)(或基于類的視圖 ?class-based view
? )。視圖會(huì)獲得如下參數(shù):
HttpRequest
?實(shí)例。django.urls.path()
? 或 ?django.urls.re_path()
? 的可選 ?kwargs
?參數(shù)中指定的任何參數(shù)覆蓋。5.如果沒有 URL 被匹配,或者匹配過程中出現(xiàn)了異常,Django 會(huì)調(diào)用一個(gè)適當(dāng)?shù)腻e(cuò)誤處理視圖。參考下面的錯(cuò)誤處理( ?Error handling? )。
例如:
下面是一個(gè)簡單的 ?URLconf
?:
from django.urls import path
from . import views
urlpatterns = [
path('articles/2003/', views.special_case_2003),
path('articles/<int:year>/', views.year_archive),
path('articles/<int:year>/<int:month>/', views.month_archive),
path('articles/<int:year>/<int:month>/<slug:slug>/', views.article_detail),
]
注意:
<int:name>
? 來捕獲整型參數(shù)。如果不包含轉(zhuǎn)換器,則會(huì)匹配除了 ?/
? 外的任何字符。articles
?而不是 ?/articles
? 。一些請(qǐng)求的例子:
/articles/2005/03/
? 會(huì)匹配 URL 列表中的第三項(xiàng)。Django 會(huì)調(diào)用函數(shù) ?views.month_archive(request, year=2005, month=3)
? 。/articles/2003/
?將匹配列表中的第一個(gè)模式不是第二個(gè),因?yàn)槟J桨错樞蚱ヅ?,第一個(gè)會(huì)首先測試是否匹配。請(qǐng)像這樣自由插入一些特殊的情況來探測匹配的次序。在這里 Django 會(huì)調(diào)用函數(shù) ?views.special_case_2003(request)
?/articles/2003
? 不匹配任何一個(gè)模式,因?yàn)槊總€(gè)模式要求 URL 以一個(gè)斜線結(jié)尾。/articles/2003/03/building-a-django-site/
? 會(huì)匹配 URL 列表中的最后一項(xiàng)。Django 會(huì)調(diào)用函數(shù) ?views.article_detail(request, year=2003, month=3, slug="building-a-django-site")
? 。Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: