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