一、URL路由基礎
URL是web服務的路口,用戶通過瀏覽器發送過來的任何請求都會被發送到一個指定的URL地址里,然后被響應。
在django項目中編寫路由就是向外暴露我們接收哪些URL的請求,除此之外任何的URL都不會被處理,URL路由就是web服務對外暴露的API
二、Django處理請求
確定要使用的 URLconf 模塊,通常是settings中 ROOT_URLCONF 設置的值,如果傳入的 HttpRequest 對象具有 urlconf 屬性(中間件設置),則使用其值代替settings中 ROOT_URLCONF
Django加載模塊并查找可用的 urlpatterns ,它是 django.conf.urls.url() 實例的一個列表
按順序運行每個URL模式,匹配成功就停下來,所以 順序很關鍵
匹配成功導入給定的視圖,它是一個python函數,或基于類的視圖,視圖將獲得如下參數
一個HttpRequest實例 如果匹配的正則表達式返回了無名分組,那么它將作為位置參數提供給視圖 關鍵字參數由正則的有名分組組成,但是可以被django.conf.urls.url()的可選參數kwargs覆蓋如果沒有URL模式匹配,或者過程出錯了,將調用錯誤處理視圖
三、簡單的路由配置
from django.conf.urls import url
urlpatterns=[ url(正則表達式,view視圖函數,參數,別名)]
示例的URLconf:
from django.urls import urlfrom . import viewsurlpatterns = [ url(r'^articles/2003/$', views.special_case_2003), url(r'^articles/([0-9]{4})/$', views.year_archive), url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive), url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail),]
注:
請求的例子及匹配的url
/articles/2005/03/將匹配列表中的第三個模式。Django將調用函數views.month_archive(request, '2005', '03')。
/articles/2005/3/不匹配任何URL模式,因為列表中的第三個模式要求月份是兩個數字。
/articles/2003/將匹配列表中的第一個模式不是第二個,因為模式按順序從上往下匹配,第一個會首先被匹配。Django會調用函數views.special_case_2003(request)
/articles/2003不匹配任何一個模式,因為每個模式都要求URL以一個斜杠結尾。
/articles/2003/03/03/將匹配最后一個模式。Django將調用函數views.article_detail(request, '2003', '03', '03')。
是否開啟URL訪問地址后面 不為/跳轉至帶有/路徑的配置項
APPEND_SLASH=True
Django settings.py配置文件中默認沒有 APPEND_SLASH 這個參數,但 Django 默認這個參數為 APPEND_SLASH = True。 其作用就是自動在網址結尾加'/'。
新聞熱點
疑難解答