Django URL路由概述正則表達式
一個乾淨優雅的URL方案是高質量Web應用程序中的一個重要細則
Django能夠讓你設計URL,不管你想要什麼,沒有框剪限制
要爲應用程序設計URL,您能夠非正式地建立一個名爲URLconf(URL configura URL配置)的Python模塊。
這個模塊是純Python代碼,是一個簡單的Python模式(簡單的正則表達式)到Python函數(您的視圖)之間的映射。算法
Djangon如何處理一個請求django
當用戶從Django服務器站點請求頁面時,系統遵循如下算法來肯定要執行的Python代碼:服務器
1. 首先Django肯定要使用的根URLconf模塊。經過 ROOT_URLCONF 來設置,具體在 settings.py 配置文件中。函數
可是若是傳入HttpRequest對象具備urlconf屬性(由中間件設置),則其值將替換ROOT_URLCONF設置。測試
2. Django加載該Python模塊並查找該變量urlpatterns。這應該是一個Python的django.conf.urls.url()實例列表。url
3. Django按順序運行每一個URL模式,並在匹配所請求的URL的第一個URL中中止。spa
4. 一旦正則表達式匹配,Django將導入並調用給定的視圖,這是一個簡單的PYthon函數(或基於類的視圖)。該視圖經過如下參數傳遞:設計
5. 若是沒有正則表達式匹配,或在此過程當中的任何一點出現異常,Django將調用適當的錯誤處理視圖。code
示例
如下是一個URLconf示例:
1 from django.conf.urls import url 2 3 from . import views 4 5 urlpatterns = [ 6 url(r'^articles/2003/$', views.special_case_2003), 7 url(r'^articles/([0-9]{4})/$', views.year_archive), 8 url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive), 9 url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail), 10 ]
說明:
1. 要從URL捕獲一個值,只須要將其括起來
2.沒有必要添加一個主要的斜槓,由於每一個URL都含有。例如^articles , 不是 ^/articles。
3.正則表達式前面的 'r' 是可選的,可是推薦使用。它告訴Python 這個字符串是一個'raw'(元字符串,字符串中沒有任何內容被轉義)
請求示例:
/articles/2005/03/ 將匹配列表中的第三個條目。Django會調用views.month_archive(request, '2005', '03')函數
/articles/2005/3/ 不會匹配其中的任何 URL模式 。由於第三個條目中 views.month_archive 月份須要兩位數字。
/articles/2003/ 將匹配列表中的第一個個模式,而不是第二個。由於模式是按順序測試的,第一個模式是 第一個經過測試 的 。像這樣能夠很隨意地插入一些特殊的模式。在這裏,Django會調用 views.special_case_2003(request)
/articles/2003 將不匹配這些模式中的任何一個,由於每一個模式都要求URL以斜槓結尾。
/articles/2003/03/03/ 將會匹配最後一個模式,Django會調用 views.article_detail(request, '2003', '03', '03') 函數
注意:每一個捕獲的參數都做爲純Python字符串發送到視圖,不管正則表達式匹配的是什麼,即便[0-9]{4} 只會匹配整數字符串。