Django路由Path方法的實(shí)現(xiàn)
path()方法
path 函數(shù)來進(jìn)行路由的匹配,可通過以下方式進(jìn)行導(dǎo)入:
#新的2.x版本導(dǎo)入path,導(dǎo)入簡(jiǎn)化 from django.urls import path #原來的1.x版本url方式,conf子包 from django.conf.urls import url
但是之前的 url 模塊并沒有廢止,只是 Django 強(qiáng)烈建議我們使用新模塊 path 進(jìn)行路由的匹配。
path方法函數(shù)定義
path 函數(shù)在 Django中的的定義如下所示:
path(route, view, kwargs, name)
它可以接收 4 個(gè)參數(shù),其中前兩個(gè)是必填參數(shù)后兩個(gè)為可選參數(shù)。參數(shù)解析如下:
- route:是一個(gè)匹配 URL 的準(zhǔn)則(類似正則表達(dá)式)。當(dāng) Django 響應(yīng)一個(gè)請(qǐng)求時(shí),它會(huì)從 urlpatterns 的第一項(xiàng)開始,按順序依次匹配列表中的項(xiàng),直到找到匹配的項(xiàng),然后執(zhí)行該項(xiàng)映射的視圖函數(shù)或者 include 函數(shù)分發(fā)的下級(jí)路由,因此,url 路由的編寫在 Django中十分的重要!
- view:指的是處理當(dāng)前 url 請(qǐng)求的視圖函數(shù)。當(dāng) Django 匹配到某個(gè)路由條目時(shí),自動(dòng)將封裝的 HttpRequest 對(duì)象作為第一個(gè)參數(shù),被“捕獲”的參數(shù)以關(guān)鍵字參數(shù)的形式,傳遞給該條目指定的視圖函數(shù)。
- kwargs:指使用字典關(guān)鍵字傳參的形式給關(guān)聯(lián)的目標(biāo)視圖函數(shù)傳遞參數(shù)。
- name:給 URL 起個(gè)別名,常用于 url 的反向解析,避免在模板中適應(yīng)硬編碼的方式使用嵌入 url,在后續(xù)章節(jié)會(huì)進(jìn)行詳細(xì)講解。
下面是一個(gè)使用path()方法的示例:
from django.urls import path from . import views urlpatterns = [ ? ? path('articles/<int:year>/', views.article_year), ]
這個(gè)示例定義了一個(gè)路由,將請(qǐng)求的URL路徑中的年份參數(shù)傳遞給名為article_year的視圖函數(shù)。在視圖函數(shù)中,可以通過request對(duì)象的year屬性來獲取年份參數(shù)的值。
當(dāng)使用 path 方法關(guān)聯(lián)視圖函數(shù)時(shí)與 url 方法相比更為簡(jiǎn)化,也更容易讓初學(xué)者理解。
path 方法引入了類型轉(zhuǎn)化器(converter type)的概念,以此省去了較為復(fù)雜的正則表達(dá)式匹配路由的方法。
實(shí)例說明如下:
#1.x url方法 url(r'^test/(?P<year>[0-9])/$', views.year_test), #2.x path方法 path('test/<int:year>/', views.year_test),
int 支持整數(shù)類型的轉(zhuǎn)化,在上述的例子中, year_test 函數(shù)接收到的 year 參數(shù)就變成整數(shù)而不是字符串,從而避免在視圖中使用year=int(year)。
path 函數(shù)定義的<int:year>規(guī)則會(huì)捕獲到 URL 中的值,映射給視圖中的同名參數(shù) year,并根據(jù)轉(zhuǎn)換器將參數(shù)值轉(zhuǎn)換為指定的類型,這里對(duì)應(yīng) int 大于等于 0 的整數(shù)。
之所以使用轉(zhuǎn)化器,有以下兩個(gè)原因:
- 第一是可以將捕獲到的字符值轉(zhuǎn)換為對(duì)應(yīng)的類型;
- 第二是對(duì) URL 中傳值的一種限制,避免視圖處理出錯(cuò);
path方法類型轉(zhuǎn)化器
Django 默認(rèn)支持 5 個(gè)類型轉(zhuǎn)換器,在大多數(shù)情況下,絕對(duì)可以滿足我們的正常業(yè)務(wù)需求,如果不能,Django 同樣提供了自定義轉(zhuǎn)換器。
下面介紹 Django 默認(rèn)支持的轉(zhuǎn)換器,如下所示:
- str,匹配除了路徑分隔符(/)之外的非空字符串,這是默認(rèn)的形式;
- int,匹配正整數(shù),包含0;
- slug,匹配字母、數(shù)字以及橫杠、下劃線組成的字符串;
- uuid,匹配格式化的 uuid,如 075194d3-6885-417e-a8a8-6c931e272f00;
- path,匹配任何非空字符串,包含了路徑分隔符。
re_path正則表達(dá)式匹配
Django 2.x 之后也支持我們使用正則表達(dá)式來捕獲值,在這里需要使用 re_path()。我們使用帶命名的正則表達(dá)式分組,語法如下:
(?P<name>pattern)
其中,尖括號(hào)里的name為分組名,pattern為正則表達(dá)式。re_path()同樣包含于django.urls模塊中,所以同樣使用如下方式進(jìn)行導(dǎo)入。示例如下:
from django.urls import path, re_path #導(dǎo)入re_path from . import views urlpatterns = [ re_path('test/(?P<year>[0-9]{4})/', views.year_test), re_path('test/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/', views.month_test)]
到此這篇關(guān)于Django路由Path方法的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Django路由Path內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python入門教程(十九)python的函數(shù)詳解
這篇文章主要介紹了Python入門教程(十九)python的函數(shù),函數(shù)是組織好的,可重復(fù)使用的,用來實(shí)現(xiàn)單一,或相關(guān)聯(lián)功能的代碼段,需要的朋友可以參考下2023-04-04利用python實(shí)現(xiàn)簡(jiǎn)單的情感分析實(shí)例教程
商品評(píng)論挖掘、電影推薦、股市預(yù)測(cè)……情感分析大有用武之地,下面這篇文章主要給大家介紹了關(guān)于利用python實(shí)現(xiàn)簡(jiǎn)單的情感分析的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06Python+Pygame實(shí)現(xiàn)趣味足球游戲
這篇文章主要為大家分享了一個(gè)基于Python和Pygame實(shí)現(xiàn)的一個(gè)趣味足球游戲,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定幫助,需要的可以參考一下2022-05-05Django app配置多個(gè)數(shù)據(jù)庫(kù)代碼實(shí)例
這篇文章主要介紹了Django app配置多個(gè)數(shù)據(jù)庫(kù)代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12Python中sorted()函數(shù)的強(qiáng)大排序技術(shù)實(shí)例探索
排序在編程中是一個(gè)基本且重要的操作,而Python的sorted()函數(shù)則為我們提供了強(qiáng)大的排序能力,在本篇文章中,我們將深入研究不同排序算法、sorted()?函數(shù)的靈活性,以及各種排序場(chǎng)景下的最佳實(shí)踐2024-01-01基于asyncio 異步協(xié)程框架實(shí)現(xiàn)收集B站直播彈幕
本文給大家分享的是基于asyncio 異步協(xié)程框架實(shí)現(xiàn)收集B站直播彈幕收集系統(tǒng)的簡(jiǎn)單設(shè)計(jì),并附上源碼,有需要的小伙伴可以參考下2016-09-09Python使用Beautiful Soup包編寫爬蟲時(shí)的一些關(guān)鍵點(diǎn)
這篇文章主要介紹了Python使用Beautiful Soup包編寫爬蟲時(shí)的一些關(guān)鍵點(diǎn),文中講到了parent屬性的使用以及soup的編碼問題,需要的朋友可以參考下2016-01-01tensorflow 大于某個(gè)值為1,小于為0的實(shí)例
這篇文章主要介紹了tensorflow 大于某個(gè)值為1,小于為0的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-06-06使用Python實(shí)現(xiàn)從麥克風(fēng)獲取音頻并識(shí)別
這篇文章主要為大家詳細(xì)介紹了如何使用Python實(shí)現(xiàn)從麥克風(fēng)獲取音頻并識(shí)別功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-02-02