溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Django3_Url控制系統(tǒng)和View視圖

發(fā)布時(shí)間:2020-06-18 15:55:31 來(lái)源:網(wǎng)絡(luò) 閱讀:13051 作者:易水寒月 欄目:編程語(yǔ)言

一.URL控制系統(tǒng)
1.簡(jiǎn)單說(shuō)明
URL配置的本質(zhì)是通過(guò)URL與對(duì)應(yīng)的View視圖形成映射,我們?cè)谡{(diào)用URL時(shí)會(huì)自動(dòng)找到對(duì)應(yīng)的view進(jìn)行邏輯處理,及通過(guò)URL告訴Django調(diào)用那一段View代碼.
2.格式
urlpatterns = [
url(‘正則表達(dá)式URL1’,views視圖函數(shù),[參數(shù)],[別名]),
url(‘正則表達(dá)式URL2’,views視圖函數(shù),[參數(shù)],[別名]),
]
參數(shù)說(shuō)明:
?一個(gè)正則表達(dá)式字符串,Django會(huì)從上往下一次匹配url,匹配有值則停止往下查找;
?一個(gè)可調(diào)用的視圖函數(shù)
?可選的要傳給視圖函數(shù)的默認(rèn)參數(shù)(字典形式)
?一個(gè)可選的別名name參數(shù),如果有了別名,在調(diào)用時(shí)可以直接用該別名,這樣修改URL,其他使用別名的應(yīng)用則不用修改
例如:
Django3_Url控制系統(tǒng)和View視圖
Django3_Url控制系統(tǒng)和View視圖

3.命名分組函數(shù)
命名分組函數(shù)分為:有命名分組函數(shù)和無(wú)命名分組函數(shù),他們是通過(guò)url中的正則表達(dá)式(表達(dá)式中帶小括號(hào)進(jìn)行分組)是否指定名字來(lái)區(qū)分。正則表達(dá)式分組并指定了名字則為有命名分組函數(shù),正則表達(dá)式分組但未指定了名字則為無(wú)命名分組函數(shù)。
3.1 不屬于兩者范疇
Django3_Url控制系統(tǒng)和View視圖
3.2 無(wú)命名分組函數(shù)
Django3_Url控制系統(tǒng)和View視圖
Django3_Url控制系統(tǒng)和View視圖
3.3 有命名分組函數(shù)
Django3_Url控制系統(tǒng)和View視圖

Django3_Url控制系統(tǒng)和View視圖
效果圖:
Django3_Url控制系統(tǒng)和View視圖
4.別名
我們通過(guò),url來(lái)映射url與view視圖之間的關(guān)聯(lián),如果其他地方需要用到我們的url時(shí),我們可以直接進(jìn)行引用,例如在form表單中,點(diǎn)擊提交之后可以使用action來(lái)跳轉(zhuǎn)到另外一個(gè)url,此時(shí)我們可以直接在form的action中直接引用需要的url。但是如果直接引用,則有以下不合理的地方:
a.隨著url中url地址的修改則需要修改所有到它的地方,可能會(huì)有遺漏的地方;
b.如果url地址比較長(zhǎng)時(shí),則所有引用的地方均需要進(jìn)行重復(fù)編寫,此時(shí)量比較大;
此時(shí),我們可以直接使用別名的形式進(jìn)行處理,如圖url別名設(shè)置:
Django3_Url控制系統(tǒng)和View視圖

引用方式如圖:
Django3_Url控制系統(tǒng)和View視圖
5.Url路由分發(fā)
在前面所有的例子中,我們只有一個(gè)app應(yīng)用,如果一個(gè)項(xiàng)目有多個(gè)不同app引用時(shí),我們把所有的url都放在urls.py中,不僅會(huì)顯得十分混亂而且有時(shí)還會(huì)影響正常功能的使用(比如APP1中有一個(gè)url有問(wèn)題,但是APP2中所有url正常,此時(shí)APP1將會(huì)影響APP2的正常使用)。此時(shí),我們可以使用url路徑分發(fā)機(jī)制來(lái)處理,如圖:
項(xiàng)目的url(項(xiàng)目中統(tǒng)籌向下分發(fā)的url):
Django3_Url控制系統(tǒng)和View視圖

APP應(yīng)用中的url設(shè)置:
Django3_Url控制系統(tǒng)和View視圖
Django3_Url控制系統(tǒng)和View視圖
6.

二.View視圖函數(shù)
View主要是用來(lái)處理邏輯的模塊,web中通過(guò)接受請(qǐng)求并處理請(qǐng)求并將處理的結(jié)果返回給請(qǐng)求對(duì)象。其中主要是通過(guò)http協(xié)議來(lái)完成請(qǐng)求的。
HTTP請(qǐng)求中產(chǎn)生兩個(gè)核心對(duì)象:
http請(qǐng)求:HttpRequest對(duì)象;
http響應(yīng):HttpResponse對(duì)象;
http模塊的位置是在django.http中。
1.HttpRequest
HttpRequest對(duì)象是由django框架內(nèi)部自己自動(dòng)創(chuàng)建的,我們?cè)诙x每個(gè)方法時(shí)必須要帶上它,名字可自定義,但建議使用request。也就是說(shuō),django的view模塊中所有定義的函數(shù),必須帶上一個(gè)request的參數(shù),且request是django在接收到請(qǐng)求后自己創(chuàng)建的對(duì)象。HttpRequest對(duì)象的屬性和方法實(shí)際上就是這個(gè)request的屬性和方法。
HttpRequest對(duì)象的主要方法:
1.1 Request.method: http請(qǐng)求的方法類別,分為GET和POST兩種;
1.2 request.GET.get('key'):http通過(guò)GET請(qǐng)求傳到HttpRequest的字典對(duì)象,再用get方法通過(guò)關(guān)鍵字獲取對(duì)應(yīng)的value;
1.3 request.POST.get('key'):http通過(guò)POST請(qǐng)求傳到HttpRequest的字典對(duì)象,再用get方法通過(guò)關(guān)鍵字獲取對(duì)應(yīng)的value;
1.4 Request.path:獲取url的鏈接,返回值不帶參數(shù);
1.5 request.get_full_path():獲取url的鏈接,若是通過(guò)get傳輸,則此處的值返回的是帶參數(shù)值的url;
如圖:
Django3_Url控制系統(tǒng)和View視圖
1.6
2.HttpResponse對(duì)象
對(duì)于HttpResponse對(duì)象來(lái)說(shuō),它和HttpRequest對(duì)象不同,前者必須要自己創(chuàng)建,而后者是django自己自動(dòng)創(chuàng)建的。每個(gè)view請(qǐng)求的處理方法必須返回一個(gè)HttpResponse。
HttpResponse對(duì)象的常用方法:
2.1 HttpResponse():將內(nèi)容返回到頁(yè)面上,此處不需要加request參數(shù),如圖:
Django3_Url控制系統(tǒng)和View視圖
2.2 render():頁(yè)面渲染(將html經(jīng)過(guò)django后臺(tái)處理后將頁(yè)面效果渲染到瀏覽器中),推薦使用。
格式: render(request,’前端.html’)注:request參數(shù)必帶;
例如:
Django3_Url控制系統(tǒng)和View視圖
注:其實(shí),render()最終返回的依然是一個(gè)HttpResponse對(duì)象,源代碼如下圖所示:
Django3_Url控制系統(tǒng)和View視圖
2.3 render_to_response():也是頁(yè)面渲染(將html經(jīng)過(guò)django后臺(tái)處理后將頁(yè)面效果渲染到瀏覽器中)
格式:render_to_response(’前端.html’),與render()作用一樣,但render_to_response()不需要帶request,且render_to_response()在使用工程中可能出現(xiàn)問(wèn)題。推薦使用render()方法。
例如:
Django3_Url控制系統(tǒng)和View視圖
注:其實(shí),render()最終返回的依然是一個(gè)HttpResponse對(duì)象,源代碼如下圖所示:
Django3_Url控制系統(tǒng)和View視圖
3.View中局部變量加載到template(html文件)中的兩種方式
a.通過(guò)key:value鍵值對(duì)字典的形式通過(guò)key獲取到對(duì)應(yīng)的value并加載到對(duì)應(yīng)的HTML文件中,如圖所示:
Django3_Url控制系統(tǒng)和View視圖
對(duì)應(yīng)的HTML引用view中變量的方式如圖所示:
Django3_Url控制系統(tǒng)和View視圖
此方法如果HTML中有N多個(gè)需要獲取view中的局部變量時(shí),則寫的key/value鍵值對(duì)將添加很多,此時(shí)會(huì)比較麻煩,但是在實(shí)際使用過(guò)程中,我們?cè)趘iew中定義的局部變量并不會(huì)很多,推薦使用該種方式。
b.通過(guò)locals()函數(shù)將view中的所有局部變量都加載到HTML中,如圖所示:
Django3_Url控制系統(tǒng)和View視圖
對(duì)應(yīng)的HTML文件加載view中的參數(shù)方式如圖所示:
Django3_Url控制系統(tǒng)和View視圖
此時(shí),view中使用什么變量名,HTML中也就使用相同的變量名,此時(shí)不再使用key獲取對(duì)應(yīng)的value值的方式。
4.redirect()
redirect()是跳轉(zhuǎn)到某一個(gè)指定的url,參數(shù)為指定要跳轉(zhuǎn)的url;如圖所示:
Django3_Url控制系統(tǒng)和View視圖
內(nèi)部原理:使用redirect(url)進(jìn)行跳轉(zhuǎn)時(shí),先去對(duì)應(yīng)的url.py中匹配對(duì)應(yīng)的redirect中指定的url,匹配成功后再去查找url對(duì)應(yīng)的view函數(shù)并執(zhí)行該函數(shù)。
注意:redirect()與render()的區(qū)別:
A.redirect()中必須跟的是url路徑,而render()中必須是需要渲染的html文件名稱;
B.redirect()跳轉(zhuǎn)之后,url會(huì)變成redirect(url)指定跳轉(zhuǎn)的url,而使用render()則url不會(huì)發(fā)生變化。
如圖:
Django3_Url控制系統(tǒng)和View視圖

Django3_Url控制系統(tǒng)和View視圖
三.相關(guān)代碼地址
https://github.com/DoneZj/django3.git

歡迎關(guān)注筆者個(gè)人公眾號(hào):
Django3_Url控制系統(tǒng)和View視圖

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI