03. Django2.1 路由

Groot發表於2019-01-30

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 協議》,轉載必須註明作者和本文連結
死磕,不要放棄,終將會有所收穫。

相關文章