欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報(bào)激活碼778899分享:后端 Django框架——路由

柚子快報(bào)激活碼778899分享:后端 Django框架——路由

http://yzkb.51969.com/

上篇文章我們學(xué)習(xí)了Django框架——請(qǐng)求與響應(yīng),這篇文章我們學(xué)習(xí)Django框架——路由。本次學(xué)習(xí)過程中使用的項(xiàng)目目錄如下圖所示:

大家放心,這個(gè)是新建的Django項(xiàng)目,還沒編寫任何代碼,這里展示目錄是為了大家更好地理解本次學(xué)習(xí)的內(nèi)容。

注意:該項(xiàng)目不是自己手動(dòng)新建文件來創(chuàng)建的,大家可以參考這篇文章來創(chuàng)建——第一個(gè)Django程序。

路由

相信大家對(duì)路由都不陌生,我們?nèi)粘g覽的網(wǎng)頁、網(wǎng)頁中顯示的內(nèi)容都是通過路由技術(shù)使用URL鏈接來獲取的。在Django框架中主要通過視圖函數(shù)views.py與路由urls.py進(jìn)行搭配,從而完成URL路由綁定。

首先在views.py文件中編寫視圖函數(shù),該函數(shù)代碼如下:

from?django.http?import?HttpResponse

def?Welcome(request):

????return?HttpResponse("歡迎學(xué)習(xí)Djang框架之路由")

該視圖函數(shù)名為Welcome,返回的內(nèi)容為字符串:歡迎學(xué)習(xí)Djang框架之路由。編寫視圖函數(shù)后,在urls.py文件中通過path方法使用該路由文件,path語法格式如下:

path('路由地址/',視圖函數(shù),name='別名')??#?別名是可有可無

path('路由地址/<數(shù)據(jù)類型:數(shù)據(jù)名>/',視圖函數(shù),name='別名')??#?傳參寫法

示例代碼如下:

from?django.contrib?import?admin

from?django.urls?import?path

from?App.views?import?*???#?導(dǎo)入視圖函數(shù)

urlpatterns?=?[

????path('admin/',?admin.site.urls),

????path('welcome/',Welcome)??#?URL綁定視圖函數(shù)

]

在urls.py中通過path方法使url路徑與視圖函數(shù)進(jìn)行綁定,接下來我們通過如下代碼啟動(dòng)Django程序,

python?manage.py?runserver

啟動(dòng)后訪問http://127.0.0.1:8000/welcome/即可獲取到視圖函數(shù)返回的內(nèi)容,好了,最基礎(chǔ)的URL路由綁定就是這樣。

除了通過path綁定視圖函數(shù)和url,還可以通過正則匹配re_path綁定,示例代碼如下:

re_path(r'Repath/(?P\d+)/(?P\d+)/',Welcome,name='Welcome')

re_path綁定已經(jīng)很少使用了,這里簡(jiǎn)單知道有re_path綁定即可。

路由分發(fā)

在實(shí)際的開發(fā)過程中,一個(gè)完成的項(xiàng)目肯定會(huì)包含很多app,假如我們將所有app的url路由綁定都寫在主路由Django.urls.py文件中,會(huì)顯得雜亂無章、可維護(hù)性、可讀性差,如下圖所示:

這時(shí)我們可以在每個(gè)app里面創(chuàng)建各自的urls.py路由文件,每個(gè)urls.py綁定各自的視圖函數(shù),如下圖所示:

從主路由出發(fā),將app所屬的URL請(qǐng)求轉(zhuǎn)發(fā)到相應(yīng)的urls.py模塊中,這與Flask框架中的藍(lán)圖類似,在Django框架中叫做路由分發(fā)。

首先在App文件夾中創(chuàng)建urls.py文件,該文件內(nèi)容如下:

from?django.urls?import?path

from?App.views?import?*

urlpatterns?=?[

????path('welcome/',Welcome)

]

注意:urls.py的路由配置必須是urlpatterns,不能隨意更改!

接下來在Django文件夾中的urls.py文件通過include方法中調(diào)用App中的urls.py文件,include語法格式如下:

path('路由地址/',include('子路由'))

path('路由地址/',include(('子路由','App名字'),namespace='命名空間名'))??#?命名空間名可以是任意的

示例代碼如下:

from?django.contrib?import?admin

from?django.urls?import?path,?include

from?App.views?import?*

urlpatterns?=?[

????path('App/',include('App.urls')),??#?使用App中的urls路由

????#?path('App/',include(('App.urls','App'),namespace='Apps'))??#命名空間寫法:使用App中的urls路由

????path('admin/',?admin.site.urls),

]

這里我們根路由的文件夾為App,所以在include中的參數(shù)為App.urls,App名字為App。接下來我們只要訪問http://127.0.0.1:8000/App/welcome/即可獲取到子路由視圖函數(shù)返回的內(nèi)容。

路由傳參

在上面的示例中,URL沒有傳遞參數(shù),當(dāng)我們?cè)L問需要傳遞參數(shù)的URL時(shí),需要在視圖函數(shù)和url.py文件中修改代碼,視圖函數(shù)示例代碼如下:

def?getCan(request,a,b):

????return?HttpResponse(f'姓名:{a}?年齡:')

在App文件夾中urls.py添加如下代碼:

path('GetCan///',getCan)

當(dāng)我們?cè)L問http://127.0.0.1:8000/App/GetCan/張三/33/,即可返回內(nèi)容為:姓名:張三 年齡:33的頁面。

這樣就成功傳遞了參數(shù),傳遞的參數(shù)類型主要有int和str。

注意:在視圖函數(shù)中參數(shù)位置和訪問的URL傳遞的參數(shù)無關(guān),例如:將上面的視圖函數(shù)改為:

def?getCan(request,b,a):

????return?HttpResponse(f'姓名:{a}?年齡:')

訪問http://127.0.0.1:8000/App/GetCan/張三/33/,返回的內(nèi)容還是姓名:張三 年齡:33

反向解析

當(dāng)我們?cè)L問http://127.0.0.1:8000/App/welcome/時(shí),在正常的解析過程:先在Django的urls.py文件中找到App/路徑,在App/路徑獲取到子路由位置,根據(jù)子路由找到welcome路徑,并找到該路徑綁定的視圖函數(shù),從而獲取視圖函數(shù)的響應(yīng),如下圖所示:

反向解析是通過別名直接在子路由中獲取到視圖函數(shù),如圖下所示:

首先在templates文件夾中添加index.html,該文件代碼如下:

????

????Title

????正常進(jìn)入

????

????反向解析進(jìn)入

在views.py文件中添加如下代碼:

def?index(request):

????return?render(request,'index.html')

def?getFan(request):

????return?HttpResponse('反向解析')

再在App文件夾中urls.py添加如下代碼:

path('index/',index),

path('Fan/',?getFan,name='FanXiang')

當(dāng)我們?cè)L問http://127.0.0.1:8000/App/index/,不管點(diǎn)擊哪個(gè)鏈接,都可以進(jìn)入http://127.0.0.1:8000/App/Fan/。

反向解析可以在我們修改url時(shí),避免代碼中的硬編碼依賴,同時(shí)提高可讀性和可維護(hù)性。

命名空間

在實(shí)際開發(fā)中,Django中可能存在多個(gè)應(yīng)用程序App,每個(gè)應(yīng)用程序都可能有自己的路由模塊,為了防止路由沖突,Django提供了命名空間(namespace)的概念,命名空間是一種將路由命名為層次結(jié)構(gòu)的方式,使得在查詢路由時(shí),可以限定在該命名空間內(nèi)。

在Django文件夾urls.py文件中,將path('App/',include('App.urls')),代碼修改為:

????path('App/',include(('App.urls','App')),namespace='Apps'),

修改后,上面反向解析示例中的index.html文件的{% url 'FanXiang'%}修改為:

{%??url?'Apps:FanXiang'%}

注意:當(dāng)我們使用了命名空間,所有用到別名的地方,命名空間名。

重定向

重定向(Redirect)就是通過各種方法將各種網(wǎng)絡(luò)請(qǐng)求重新定個(gè)方向轉(zhuǎn)到其它位置(如:網(wǎng)頁重定向、域名的重定向、路由選擇的變化也是對(duì)數(shù)據(jù)報(bào)文經(jīng)由路徑的一種重定向),在Django中,重定向主要使用了redirect和reverse方法,其語法格式如下:

redirect('URL路徑')??

redirect(reverse('別名'))

redirect(reverse('別名',args=[參數(shù),]))??#?固定位置傳參

redirect(reverse('別名',kwargs={"參數(shù)鍵":'參數(shù)值'}))?#?指定參數(shù)傳參

視圖函數(shù)views.py添加如下代碼:

from?django.shortcuts?import?redirect,reverse

def?getRedirect(request):

????#?return?redirect('/App/index/')

????#?return?redirect(reverse('Apps:FanXiang'))

????#?return?redirect(reverse('Apps:getCan',args=['張三',33]))

????return?redirect(reverse('Apps:getCan',kwargs={'a':'張三','b':33}))

App文件夾urls.py文件示例代碼如下:

from?django.urls?import?path

from?App.views?import?*

urlpatterns?=?[

????path('welcome/',Welcome),

????path('GetCan///',getCan,name='getCan'),

????path('index/',index),

????path('Fan/',?getFan,name='FanXiang'),

????path('redirect/',?getRedirect,?name='redirect')

]

接下來大家訪問http://127.0.0.1:8000/App/redirect/即可重定向。

好了,Django框架——路由就學(xué)習(xí)到這里,下篇文章我們學(xué)習(xí)Django框架——模版。

公眾號(hào):白巧克力LIN

該公眾號(hào)發(fā)布Python、數(shù)據(jù)庫、Linux、Flask、Django、自動(dòng)化測(cè)試、Git、算法、前端、服務(wù)器等相關(guān)文章!

- END -

柚子快報(bào)激活碼778899分享:后端 Django框架——路由

http://yzkb.51969.com/

文章鏈接

評(píng)論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。

轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19208729.html

發(fā)布評(píng)論

您暫未設(shè)置收款碼

請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄