一、URL路由基礎(chǔ)
URL是web服務(wù)的路口,用戶通過瀏覽器發(fā)送過來(lái)的任何請(qǐng)求都會(huì)被發(fā)送到一個(gè)指定的URL地址里,然后被響應(yīng)。
在django項(xiàng)目中編寫路由就是向外暴露我們接收哪些URL的請(qǐng)求,除此之外任何的URL都不會(huì)被處理,URL路由就是web服務(wù)對(duì)外暴露的API
二、Django處理請(qǐng)求
確定要使用的 URLconf 模塊,通常是settings中 ROOT_URLCONF 設(shè)置的值,如果傳入的 HttpRequest 對(duì)象具有 urlconf 屬性(中間件設(shè)置),則使用其值代替settings中 ROOT_URLCONF
Django加載模塊并查找可用的 urlpatterns ,它是 django.conf.urls.url() 實(shí)例的一個(gè)列表
按順序運(yùn)行每個(gè)URL模式,匹配成功就停下來(lái),所以 順序很關(guān)鍵
匹配成功導(dǎo)入給定的視圖,它是一個(gè)python函數(shù),或基于類的視圖,視圖將獲得如下參數(shù)
一個(gè)HttpRequest實(shí)例 如果匹配的正則表達(dá)式返回了無(wú)名分組,那么它將作為位置參數(shù)提供給視圖 關(guān)鍵字參數(shù)由正則的有名分組組成,但是可以被django.conf.urls.url()的可選參數(shù)kwargs覆蓋如果沒有URL模式匹配,或者過程出錯(cuò)了,將調(diào)用錯(cuò)誤處理視圖
三、簡(jiǎn)單的路由配置
from django.conf.urls import url
urlpatterns=[ url(正則表達(dá)式,view視圖函數(shù),參數(shù),別名)]
示例的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),]
注:
請(qǐng)求的例子及匹配的url
/articles/2005/03/將匹配列表中的第三個(gè)模式。Django將調(diào)用函數(shù)views.month_archive(request, '2005', '03')。
/articles/2005/3/不匹配任何URL模式,因?yàn)榱斜碇械牡谌齻€(gè)模式要求月份是兩個(gè)數(shù)字。
/articles/2003/將匹配列表中的第一個(gè)模式不是第二個(gè),因?yàn)槟J桨错樞驈纳贤缕ヅ洌谝粋€(gè)會(huì)首先被匹配。Django會(huì)調(diào)用函數(shù)views.special_case_2003(request)
/articles/2003不匹配任何一個(gè)模式,因?yàn)槊總€(gè)模式都要求URL以一個(gè)斜杠結(jié)尾。
/articles/2003/03/03/將匹配最后一個(gè)模式。Django將調(diào)用函數(shù)views.article_detail(request, '2003', '03', '03')。
是否開啟URL訪問地址后面 不為/跳轉(zhuǎn)至帶有/路徑的配置項(xiàng)
APPEND_SLASH=True
Django settings.py配置文件中默認(rèn)沒有 APPEND_SLASH 這個(gè)參數(shù),但 Django 默認(rèn)這個(gè)參數(shù)為 APPEND_SLASH = True。 其作用就是自動(dòng)在網(wǎng)址結(jié)尾加'/'。
新聞熱點(diǎn)
疑難解答
圖片精選