URLconf
-
瀏覽者通過在瀏覽器的地址欄中輸入網址請求網站
-
對於Django開發的網站,由哪一個視圖進行處理請求,是由url匹配找到的
配置URLconf
-
settings.py中
指定url配置
ROOT_URLCONF = '項目.urls'
-
項目中urls.py
匹配成功後,包含到應用的urls.py
url(正則, include('應用.urls'))
-
應用中urls.py
匹配成功後,調用views.py對應的函數
url(正則, views.函數名)
-
提示
1. 正則部分推薦使用 r,表示字符串不轉義,這樣在正則 表達式中使用 \ 只寫一個就可以 2. 不能在開始加反斜槓,推薦在結束加反斜槓 正確:path/ 正確:path 錯誤:/path 錯誤:/path/ 3. 請求的url被看做是一個普通的python字符串,進行匹配時不包括域名、get或post參數 3.1 如請求地址如下: http://127.0.0.1:8000/18/?a=10 3.2 去掉域名和參數部分後,只剩下如下部分與正則匹配 18/
路由命名與reverse反解析(逆向)
1. 路由命名
在定義路由的時候,可以爲路由命名,方便查找特定視圖的具體路徑信息。
-
在使用include函數定義路由時,可以使用namespace參數定義路由的命名空間,如
url(r'^',include('book.urls',namespace='book'))
命名空間表示,凡是book.urls中定義的路由,均屬於namespace指明的book名下。
命名空間的作用:避免不同應用中的路由使用了相同的名字發生衝突,使用命名空間區別開。
-
在定義普通路由時,可以使用name參數指明路由的名字,如
urlpatterns = [ url(r'^$',index), # 匹配書籍列表信息的URL,調用對應的bookList視圖 url(r'^booklist/$',bookList,name='index'), url(r'^testproject/$',views.testproject,name='test'), ]
2. reverse反解析
使用reverse函數,可以根據路由名稱,返回具體的路徑,如:
from django.core.urlresolvers import reverse
#或者
from django.urls import reverse
def testproject(request):
return HttpResponse("OK")
# 定義視圖:提供書籍列表信息
def bookList(request):
url = reverse('book:test')
print(url)
return HttpResponse('index')
-
對於未指明namespace的,reverse(路由name)
-
對於指明namespace的,reverse(命名空間namespace:路由name)