django中路由匹配中正則提取參數(shù)機(jī)制詳解
django路由匹配示例
下面是我們的示例代碼:
# 路由 from django.urls import path, re_path from . import views urlpatterns = [ path('articles/2003/', views.special_case_2003), # 2.0以前版本 是url,現(xiàn)在是re_path 主要是通過正則來匹配 re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive), ] # 視圖層 def month_archive(request,year,month): pass
路由參數(shù)傳遞剖析
django是如何把路由參數(shù)獲取并傳遞給視圖呢?
從字面上我們可以看出來來,【正則路】所以這里面它巧妙的利用了正則的分組特性,并通過參數(shù)解包特性來完成,下面我們演示下大致的流程
假設(shè):我們?cè)L問了的path是: articles/2021/11/
1.利用正則分組匹配獲取分組參數(shù)
import re path = "articles/2021/11/" # 使用 正則去匹配路由 res = re.search(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$',path) if not res: print("匹配失敗!") else: # 提取path參數(shù),利用分組 kwargs = res.groupdict()
利用分組我們就可以正常的把里面path參數(shù)獲取到:
{'year': '2021', 'month': '11'}
2.我們利用解包特性把對(duì)應(yīng)的參數(shù)傳遞給視圖
# 偽代碼,調(diào)用視圖, # 這中情況可能會(huì)更友好,直接通過關(guān)鍵詞方式調(diào)用,不影響我們方法定義的時(shí)候參數(shù)位置 # 但是實(shí)際django利用的是位置參數(shù)傳遞 month_archive(request,**kwargs) # 上面的就等價(jià)于 month_archive(request, year="2021", month="11") # 下面是位置參數(shù)傳遞,注意這是在正則提取的結(jié)果上進(jìn)一步操作 # 1. 提取分組結(jié)果 args = res.groups() #('2021', '11') # 2. 調(diào)用視圖,這樣就限制了其位置 month_archive(request,*args) # 上面的代碼等價(jià)于 month_archive(request,"2011","11")
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用實(shí)現(xiàn)XlsxWriter創(chuàng)建Excel文件并編輯
今天小編就為大家分享一篇使用實(shí)現(xiàn)XlsxWriter創(chuàng)建Excel文件并編輯,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-05-05Cpython3.9源碼解析python中的大小整數(shù)
這篇文章主要介紹了Cpython3.9源碼解析python中的大小整數(shù),在CPython中,小整數(shù)對(duì)象池是一種優(yōu)化機(jī)制,用于減少對(duì)常用小整數(shù)的內(nèi)存分配和銷毀開銷,需要的朋友可以參考下2023-04-04Python填充任意顏色,不同算法時(shí)間差異分析說明
這篇文章主要介紹了Python填充任意顏色,不同算法時(shí)間差異分析說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-05-05Python強(qiáng)制子類重寫父類的兩種方法實(shí)現(xiàn)
在Python中,有時(shí)候我們希望某個(gè)類能夠被子類繼承并重寫其中的某些方法,本文主要介紹了Python強(qiáng)制子類重寫父類的兩種方法實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-02-02python設(shè)置環(huán)境變量的作用和實(shí)例
在本篇文章里小編給各位整理了關(guān)于python設(shè)置環(huán)境變量的作用和實(shí)例內(nèi)容知識(shí)點(diǎn),需要的朋友們學(xué)習(xí)參考下。2019-07-07