使用方面Django2.0在url有哪些改變-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買多久送多久,劃算不套路!

創(chuàng)新互聯(lián)自2013年創(chuàng)立以來,先為呈貢等服務(wù)建站,呈貢等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為呈貢企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

今天就跟大家聊聊有關(guān)使用方面Django2.0在url有哪些改變,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

Django2.0發(fā)布后,很多人都擁抱變化,加入了2的行列。
但是和1.11相比,2.0在url的使用方面發(fā)生了很大的變化,下面介紹一下:

一、實(shí)例

先看一個(gè)例子:

from django.urls import path
from . import views
urlpatterns = [
    path('articles/2003/', views.special_case_2003),
    path('articles/<int:year>/', views.year_archive),
    path('articles/<int:year>/<int:month>/', views.month_archive),
    path('articles/<int:year>/<int:month>/<slug:slug>/', views.article_detail),]

注意:

要捕獲一段url中的值,需要使用尖括號,而不是之前的圓括號;可以轉(zhuǎn)換捕獲到的值為指定類型,比如例子中的int。默認(rèn)情況下,捕獲到的結(jié)果保存為字符串類型,不包含/這個(gè)特殊字符;匹配模式的最開頭不需要添加/,因?yàn)槟J(rèn)情況下,每個(gè)url都帶一個(gè)最前面的/,既然大家都有的部分,就不用浪費(fèi)時(shí)間特別寫一個(gè)了。

匹配例子:

/articles/2005/03/ 將匹配第三條,并調(diào)用views.month_archive(request, year=2005, month=3);

/articles/2003/匹配第一條,并調(diào)用views.special_case_2003(request);

/articles/2003將一條都匹配不上,因?yàn)樗詈笊倭艘粋€(gè)斜杠,而列表中的所有模式中都以斜杠結(jié)尾;

/articles/2003/03/building-a-django-site/ 將匹配最后一個(gè),并調(diào)用views.article_detail(request, year=2003, month=3, slug="building-a-django-site"

二、path轉(zhuǎn)換器

默認(rèn)情況下,Django內(nèi)置下面的路徑轉(zhuǎn)換器:

str:匹配任何非空字符串,但不含斜杠/,如果你沒有專門指定轉(zhuǎn)換器,那么這個(gè)是默認(rèn)使用的;

int:匹配0和正整數(shù),返回一個(gè)int類型

slug:可理解為注釋、后綴、附屬等概念,是url拖在最后的一部分解釋性字符。該轉(zhuǎn)換器匹配任何ASCII字符以及連接符和下劃線,比如’ building-your-1st-django-site‘;

uuid:匹配一個(gè)uuid格式的對象。為了防止沖突,規(guī)定必須使用破折號,所有字母必須小寫,例如’075194d3-6885-417e-a8a8-6c931e272f00‘ 。返回一個(gè)UUID對象;

path:匹配任何非空字符串,重點(diǎn)是可以包含路徑分隔符’/‘。這個(gè)轉(zhuǎn)換器可以幫助你匹配整個(gè)url而不是一段一段的url字符串。

三、自定義path轉(zhuǎn)換器

其實(shí)就是寫一個(gè)類,并包含下面的成員和屬性:

類屬性regex:一個(gè)字符串形式的正則表達(dá)式屬性;

to_python(self, value) 方法:一個(gè)用來將匹配到的字符串轉(zhuǎn)換為你想要的那個(gè)數(shù)據(jù)類型,并傳遞給視圖函數(shù)。如果轉(zhuǎn)換失敗,它必須彈出ValueError異常;

to_url(self, value)方法:將Python數(shù)據(jù)類型轉(zhuǎn)換為一段url的方法,上面方法的反向操作。

例如,新建一個(gè)converters.py文件,與urlconf同目錄,寫個(gè)下面的類:

class FourDigitYearConverter:
    regex = '[0-9]{4}'
    def to_python(self, value):        
        return int(value)    
    def to_url(self, value):        
        return '%04d' % value

寫完類后,在URLconf 中注冊,并使用它,如下所示,注冊了一個(gè)yyyy:

from django.urls import register_converter, path
from . import converters, views
register_converter(converters.FourDigitYearConverter, 'yyyy')
urlpatterns = [
    path('articles/2003/', views.special_case_2003),
    path('articles/<yyyy:year>/', views.year_archive),
    ...
]

四、使用正則表達(dá)式

Django2.0的url雖然改‘配置’了,但它依然向老版本兼容。而這個(gè)兼容的辦法,就是用re_path()方法代替path()方法。re_path()方法在骨子里,根本就是以前的url()方法,只不過導(dǎo)入的位置變了。下面是一個(gè)例子,對比一下Django1.11時(shí)代的語法,有什么太大的差別?

from django.urls import path, re_path
from . import views
urlpatterns = [
    path('articles/2003/', views.special_case_2003),
    re_path('articles/(?P<year>[0-9]{4})/', views.year_archive),
    re_path('articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/', views.month_archive),
    re_path('articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<slug>[\w-_]+)/', views.article_detail),
]

與path()方法不同的在于兩點(diǎn):

year中匹配不到10000等非四位數(shù)字,這是正則表達(dá)式?jīng)Q定的傳遞給視圖的所有參數(shù)都是字符串類型。而不像path()方法中可以指定轉(zhuǎn)換成某種類型。在視圖中接收參數(shù)時(shí)一定要小心。

五、總結(jié)

除了上面的部分,Django2.0路由系統(tǒng)其它的知識點(diǎn)和Django1.11的基本都是相同的,就是在寫法上面有那么點(diǎn)小小的區(qū)別。

你只需要使用from django.urls import re_path正確導(dǎo)入re_path()方法,并用它替換url()方法就可以了。

看完上述內(nèi)容,你們對使用方面Django2.0在url有哪些改變有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道,感謝大家的支持。

網(wǎng)站欄目:使用方面Django2.0在url有哪些改變-創(chuàng)新互聯(lián)
分享鏈接:http://muchs.cn/article40/cdieeo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、網(wǎng)頁設(shè)計(jì)公司、ChatGPT、響應(yīng)式網(wǎng)站、標(biāo)簽優(yōu)化微信公眾號

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化