學習筆記,僅供參考
參考自:Django打造大型企業官網;
本系列Blog以應用爲主,理論基礎部分我在後端專欄的Django系列博客已經寫過了,如果有些需要補充的知識點,我會在這個系列中,儘量詳細的寫一下。
path和re_path
path函數
語法
path(route,view,name=None,kwargs=None)
參數講解
route
參數
該參數指定了url
的匹配規則。
我們在該參數中,可以指定url
需要傳遞的參數,比如在訪問文章詳情頁的時候,可以傳遞一個id
。傳遞參數是通過<>
尖括號來進行指定的,並且在傳遞參數的時候,可以指定這個參數的數據類型(如果沒有指定任何數據類型則默認爲str類型),比如文章的id
都是int
類型,那麼可以寫成 <int:id>
的形式,在匹配的時候,就只會匹配到id
爲int
類型的url
,而不會匹配其他數據類型的url
。
幾個常用的數據類型:
數據類型 | 解釋 | 底層正則形式 |
---|---|---|
str | 非空的字符串類型,默認的轉換器,但是不能包含斜槓/ |
[^/]+ |
int | 匹配任意的零或者正數的整形,到視圖函數中就是一個int類型 | [0-9]+ |
slug | 由英文中的橫槓- ,或者下劃線_ 連接英文字符或者數字而成的字符串 |
[-a-zA-Z0-9_]+ |
uuid | 匹配uuid 字符串,使用UUID類生成的字符串,是全球唯一的字符串 |
[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} |
path | 匹配非空的英文字符串,可以包含斜槓/ |
.+ |
view
參數
該參數可以爲一個視圖函數
,或者是類視圖.as_view()
,或者是django.urls.include()
函數的返回值。
name
參數
這個參數是給url
取個名字,在項目比較大時,url
比較多時,設置該參數用處很大。
kwargs
參數
有時候想給視圖函數傳遞一些額外的參數,就可以通過kwargs
參數進行傳遞。這個參數接收一個字典,會通過關鍵字參數的方式傳到視圖函數中去,比如以下的url
規則:
from django.urls import path
from . import views
urlpatterns = [
path('blog/<int:year>/', views.year_archive, {'foo': 'bar'}),
]
那麼以後在訪問http://127.0.0.1:8000/blog/2020/
的時候,會將foo=bar
作爲關鍵字參數傳給year_archive
函數。
re_path函數
有時候我們在寫url匹配的時候,想要寫使用正則表達式來實現一些複雜的需求,那麼這時候我們可以使用re_path
來實現。
re_path
的參數和path
一樣,只不過第一個參數route
可以爲一個正則表達式,比如:
from django.contrib import admin
from django.urls import path
from . import views
from django.urls import re_path
#.表示從當前包裏導入
urlpatterns = [
path('admin/', admin.site.urls),
re_path(r'year/(\d{4})/', views.year),
re_path(r'birthday/(\d{4})/(\d{1,2})/(\d{1,2})/', views.page_birth),
re_path(r'bunny/(?P<age>\d{1,2})/(?P<name>\w+)/', views.page_bunny),
re_path(r'post_test/$', views.post_test),
]
以上例子中我們可以看到,所有的route
字符串前面都加了一個r
,表示這個字符串是一個原生字符串。在寫正則表達式中是推薦使用原生字符串的,這樣可以避免在python
這一層面進行轉義。
使用正則表達式捕獲參數時,我們需要用一個圓括號對正則表達式進行包裹,參數名需要通過尖括號 <>
進行包裹,並在尖括號 <>
前加上?P
。