django是如何處理一個請求的?
1.1 django根據setting中ROOT_URLCONF設定的值確定URLconf模組【路由檔案】
1.2 載入路由模組並找到變數urlpatterens,變數中包含django.urls.path()或django.url.re_path()【正則匹配】例項
1.3 django依次匹配每個URL模式,一旦其中一個模式匹配,Django就會匯入並呼叫給定的檢視【一個python函式或基於類的檢視】,路由給檢視傳遞以下引數:
a. 一個HttpRequest例項
b. 如果匹配的URL模式未返回任務命名組,則正規表示式中的匹配將作為位置引數提供
1.4 如果沒有URL模式匹配,或在此過程引發異常,Django將呼叫適當的錯誤處理檢視,自定義處理錯誤檢視需要在URLconf模組中配置以下變數並設定檢視檔案位置:
a. handler400
b. handler403
c. handler404
d. handler500
1.5 幾個例子
from django.urls import path, include, re_path
from apps.message import views
from django.conf.urls import url
from apps.article.views import IndexView as ArticleView
from .settings import MEDIA_ROOT
from django.views.static import serve
import xadmin # 後臺專案
urlpatterns = [
# 匹配空路由 載入頁面首頁,路由命名為home 路由命名後可在模板中呼叫
path('', ArticleView.as_view(),name='home'), # 基於類檢視方法的呼叫
# 匹配 'article'路由,並把路由分發到app URLconf配置中,使用django.urls.include載入app URLconf配置檔案
path('article/', include('apps.article.urls')), # 載入子URLconf配置
# goods/100 將會被匹配
path('goods/<int:id>', views.goods),
path('admin/', xadmin.site.urls),
# 使用正規表示式 語法是(?P<name>Pattern) name為引數名稱 Pattern是匹配模式
re_path(r'^goods/(?P<id>[0-9]{4})/$', views.goods),
]
#要在路由中捕獲引數需要使用尖括號<int:id> int為匹配引數的型別 id為引數的名字,在檢視檔案中獲取 views.goods(request,id)
# 定義錯誤頁面
handler500 = views.err404
handler404 = views.err404
本作品採用《CC 協議》,轉載必須註明作者和本文連結