Django中url與path及re_path的區(qū)別說(shuō)明
初學(xué)者一般不能分清兩者的區(qū)別,所這簡(jiǎn)單介紹下兩者.首先,url是Django 1.x中的寫法,p在Django2.1中,開(kāi)始舍棄django1.x中的url寫法。
在django2.x中,描寫url配置的有兩個(gè)函數(shù)path和re_path.re_path()函數(shù)可以看做是django 1.x中得url函數(shù),即可以在路徑中使用正則.
一.path和url的區(qū)別:django.urls pathdjango.conf.urls url
path與url是兩個(gè)不同的模塊,效果都是響應(yīng)返回頁(yè)面, path調(diào)用的是python第三方模塊或框架,而url則是自定義的模塊,如Views下的def函數(shù)對(duì)應(yīng)你url中的參數(shù)值.
例如:
url(r’^login’,views.login), def login(request): return render(request,’login.html’)1、url
在settings.py文件中有一個(gè)ROOT_URLCONF設(shè)置,設(shè)置的是在訪問(wèn)網(wǎng)址時(shí)通過(guò)哪一個(gè)url文件去匹配所請(qǐng)求的網(wǎng)址
url參數(shù)
url或者re_path要復(fù)雜一些 (r’^blog/(?P[0-9]{4})/′)首先需要開(kāi)始符和結(jié)尾符 ’) 首先需要開(kāi)始符^和結(jié)尾符 ′)首先需要開(kāi)始符和結(jié)尾符,參數(shù)匹配一個(gè) ()就是一個(gè)匹配參數(shù),
(?P<匹配的字段名>正則表達(dá)式)
進(jìn)行匹配是不包括get或者post請(qǐng)求方式的參數(shù)及域名比如www.qq.com/blog?num=1并不會(huì)匹配?后邊的字符
可以給request參數(shù)設(shè)置一個(gè)默認(rèn)值,最常見(jiàn)的分頁(yè)url,比如
urlpatterns=[ url(r’^page/$’,views.page), url(r’^page(?P<num>[0-9]+)$’,views.page) ] #views def page(request,num=’1’): pass
自定義錯(cuò)誤頁(yè)面關(guān)鍵字handler400=blog.views.page_no_find
#urls.py … handler400=blog.views.page_no_find2、path
參數(shù)的使用方法path(‘blog/str:string/’) 簡(jiǎn)單了很多,就是尖括號(hào),前邊是str代表參數(shù)的類型,后面代表參數(shù)的名稱
path參數(shù)類型
捕獲url中的參數(shù)需要用到尖括號(hào)<> 指定尖括號(hào)中的值類型比如int:astr:link這個(gè)轉(zhuǎn)換器還有許多類型比如:
int 匹配0和正整數(shù)
str 匹配任何空字符串但不包括/
slug 可理解為注釋 匹配任何ascii碼包括連接線和下劃線
uuid 匹配一個(gè)uuid對(duì)象(該對(duì)象必須包括破折號(hào)—,所有字母必須小寫)
path 匹配所有的字符串 包括/(意思就是path前邊和后邊的所有)
3.re_path如果遇上路徑和轉(zhuǎn)換器語(yǔ)法都不足以定義的URL模式,那么就需要使用正則表達(dá)式,這時(shí)候就需要使用re_path(),而非path()。
舉例:傳遞 數(shù)字結(jié)尾的參數(shù)
re_path(r’(d+)/$’,views.peopleList,name=’peopleList’),二、python3中使用django2,常見(jiàn)設(shè)置path問(wèn)題1.Django2中使用
在python3中使用django2的時(shí)候,在設(shè)置urls的時(shí)候,會(huì)遇到一些坑。這里做一下記錄。
系統(tǒng)的urls.py里,在1.X的時(shí)候,都是采用的url方式。如下
url(r’^’, include('test1.urls')),
在2.0中,它推薦使用的是path模塊,所以這里就改寫一下。引包
from django.urls import path path(’’, include('test1.urls')),
注意:
如果要使用正則,則要引入re_path,from django.urls import path, re_path
這里面的正則寫法,有點(diǎn)意思,一定要使用()把正則包起來(lái),然后用?P正式表達(dá)式 這種形式來(lái)表式
2.APP中使用path1.x里面的寫法是
url(r’^page=(d+)&key=(w+)$’, views.detail, name=”detail”),
現(xiàn)在的寫法
re_path(’page=(?P<page>d+)&key=(?P<key>w+)’, views.detail, name='detail'),
這樣一對(duì)比就能明白了吧,使用的鏈接是http://127.0.0.1:8000/page=12&key=abc
3.系統(tǒng)的urls.py里的namespace的問(wèn)題1.x中寫法
url(r’^’, include('test1.urls', namespace=’test1’)),
可是在2.0中你這么寫,會(huì)報(bào)錯(cuò),說(shuō)什么app_name的,這個(gè)自己可以看一下,怎么解決呢,其實(shí)很簡(jiǎn)單,只要在自己項(xiàng)目urls.py中加上這句就行了.如果不加的話可能報(bào)錯(cuò),
app_name = ’test1’(你的APP名)
注:
使用url也是可以的,為了簡(jiǎn)便起見(jiàn),盡量使用符合版本的字段,另外在寫路徑時(shí)應(yīng)該嚴(yán)格按照語(yǔ)法,比如’^’ 和/$就不能缺,不能前面寫url,括號(hào)里面確按照path的寫法,這樣很容易出錯(cuò),到了關(guān)鍵時(shí)刻,很難定位問(wèn)題點(diǎn),很浪費(fèi)時(shí)間.
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章:
1. js實(shí)現(xiàn)跳一跳小游戲2. 10個(gè)提供免費(fèi)PHP腳本下載的網(wǎng)站3. python 爬取嗶哩嗶哩up主信息和投稿視頻4. php5.6不能擴(kuò)展redis.so的解決方法5. Java 基于UDP協(xié)議實(shí)現(xiàn)消息發(fā)送6. PHP擴(kuò)展之APC——Alternative PHP Cache(可選PHP緩存)7. js實(shí)現(xiàn)貪吃蛇小游戲(加墻)8. PHP設(shè)計(jì)模式(四)原型模式Prototype實(shí)例詳解【創(chuàng)建型】9. SpringBoot 開(kāi)發(fā)提速神器 Lombok+MybatisPlus+SwaggerUI10. Python編寫nmap掃描工具
