Django從理論到實戰(part9)--path和re_path

學習筆記,僅供參考

參考自:Django打造大型企業官網;

本系列Blog以應用爲主,理論基礎部分我在後端專欄Django系列博客已經寫過了,如果有些需要補充的知識點,我會在這個系列中,儘量詳細的寫一下。



path和re_path


path函數


語法


path(route,view,name=None,kwargs=None)

參數講解


  • route參數

該參數指定了url的匹配規則。

我們在該參數中,可以指定url需要傳遞的參數,比如在訪問文章詳情頁的時候,可以傳遞一個id。傳遞參數是通過<>尖括號來進行指定的,並且在傳遞參數的時候,可以指定這個參數的數據類型(如果沒有指定任何數據類型則默認爲str類型),比如文章的id都是int類型,那麼可以寫成 <int:id>的形式,在匹配的時候,就只會匹配到idint類型的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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章