Django视图(一)
Django視圖(一)
文章目錄
- Django視圖(一)
- 一、視圖
- 1.視圖簡介
- 2.視圖的功能
- 3.使用視圖的過程
- 4.內(nèi)置錯誤視圖
- 二、URLconf
- 1.配置
- 2.語法
- 3.獲取值
- 三、HttpReqeust對象
- 1.屬性
- 2.示例
一、視圖
1.視圖簡介
- 視圖就是python中的函數(shù),視圖一般被定義在"應(yīng)用/views.py"文件中
- 視圖必須返回一個HttpResponse對象或子對象作為響應(yīng)。響應(yīng)可以是一張網(wǎng)頁的HTML內(nèi)容,一個重定向,一個404錯誤等。
視圖的第一個參數(shù)必須為HttpRequest實例,還可能包含下參數(shù)如:
- 通過正則表達(dá)式組獲得的關(guān)鍵字參數(shù)。
- 通過正則表達(dá)式組獲取的位置參數(shù)。
2.視圖的功能
視圖負(fù)責(zé)接受Web請求HttpRequest,進(jìn)行邏輯處理,返回Web響應(yīng)HttpResponse給請求者。
示例:
- 1) 創(chuàng)建項目test3。
- 2) 進(jìn)入項目目錄,創(chuàng)建應(yīng)用booktest。
- 3) 在test3/settings.py中INSTALLED_APPS項安裝應(yīng)用
- 4) 在test3/settings.py中DATABASES項配置使用MySQL數(shù)據(jù)庫test2,數(shù)據(jù)庫在第二部分已經(jīng)創(chuàng)建。
- 5) 在test3/settings.py中TEMPLATES項配置模板查找路徑。
- 6)創(chuàng)建模板目錄結(jié)構(gòu)如下。
3.使用視圖的過程
視圖就是一個python函數(shù),被定義在"應(yīng)用/views.py"文件中。 使用視圖時需要進(jìn)行兩方面操作,兩個操作不分先后。
- 1)在"應(yīng)用/views.py"中定義視圖。
request參數(shù)必須有。是一個HttpRequest類型的對象。參數(shù)名可以變化,
但不要更改。
- 2)配置URLconf,將視圖函數(shù)和url對應(yīng)起來。
url配置的過程
1)在項目的urls文件中包含具體應(yīng)用的urls文件,在具體應(yīng)用的urls文件中包含具體url和視圖的對應(yīng)關(guān)系。
2)url配置項是定義在一個名叫urlpatterns的列表中,其中的每一個元素就是一個配置項,每一個配置項都調(diào)用url函數(shù)。
在test3/urls.py中編輯加入如下代碼:
在booktest目錄下創(chuàng)建urls.py文件并編輯其內(nèi)容如下:
from django.conf.urls import url #導(dǎo)入url函數(shù)from booktest import views #導(dǎo)入視圖模塊urlpatterns = [url(r'^$', views.index), #建立url和views.index視圖函數(shù)的關(guān)聯(lián) ]- 啟動服務(wù)器
啟動服務(wù)器,并通過瀏覽器訪問 http://127.0.0.1:8000, 頁面顯示如下:
4.內(nèi)置錯誤視圖
- Django內(nèi)置處理HTTP錯誤的視圖,主要錯誤及視圖包括:
- 404錯誤:page not found視圖
- 500錯誤:server error視圖
如果想看到錯誤視圖而不是調(diào)試信息,需要修改test3/setting.py文件的DEBUG項。
- 404錯誤及視圖
將請求地址進(jìn)行url匹配后,沒有找到匹配的正則表達(dá)式,則自動調(diào)用404視圖,這個視圖會調(diào)用404.html的模板進(jìn)行渲染,如果要顯示自定義的頁面,則需要的templates目錄下面自定義一個404.html文件。視圖傳遞變量request_path給模板,表示導(dǎo)致錯誤的URL。
- a)url沒有配置
- b)url配置錯誤
- 1)在templates中創(chuàng)建404.html。
- 2)定義代碼如下:
- 3)在瀏覽器中輸入如下網(wǎng)址:
- 4)運行效果如下圖:
- 500錯誤及視圖
在視圖中代碼運行報錯會發(fā)生500錯誤,調(diào)用內(nèi)置錯誤視圖(和404錯誤原理一致),使用templates/500.html模板渲染。
- 視圖處理過程如下圖:
二、URLconf
用戶通過在瀏覽器的地址欄中輸入網(wǎng)址請求網(wǎng)站,對于Django開發(fā)的網(wǎng)站,由哪一個視圖進(jìn)行處理請求,是由url匹配找到的。
1.配置
- 1)在test3/settings.py中通過ROOT_URLCONF指定url配置,默認(rèn)已經(jīng)有此配置。
- 2)打開test3/urls.py可以看到默認(rèn)配置。
注意點:
在test3/urls.py中進(jìn)行包含配置,在各自應(yīng)用中創(chuàng)建具體配置。
定義urlpatterns列表,存儲url()對象,這個名稱是固定的。
urlpatterns中的每個正則表達(dá)式在第一次訪問它們時被編譯,這使得運行很快。
2.語法
url()對象,被定義在django.conf.urls包中,有兩種語法結(jié)構(gòu):
- 語法一:包含,一般在自定義應(yīng)用中創(chuàng)建一個urls.py來定義url。
這種語法用于test3/urls.py中,目的是將應(yīng)用的urls配置到應(yīng)用內(nèi)部,數(shù)據(jù)更清晰并且易于維護(hù)。
url(正則,include('應(yīng)用.urls'))- 1)如示例在test3/urls.py文件,包含booktest中的urls。
- 如示例在booktest目錄下創(chuàng)建urls.py文件。
- 語法二:定義,指定URL和視圖函數(shù)的對應(yīng)關(guān)系。
在應(yīng)用內(nèi)部創(chuàng)建urls.py文件,指定請求地址與視圖的對應(yīng)關(guān)系。
url(正則,'視圖函數(shù)名稱')- 1)如示例在booktest/urls.py中創(chuàng)建首頁的url,代碼如下
- 2)如示例在booktest/views.py中創(chuàng)建視圖index
說明1:正則部分推薦使用r,表示字符串不轉(zhuǎn)義,這樣在正則表達(dá)式中使用\只寫一個就可以。 說明2:不能在開始加反斜杠,推薦在結(jié)束加反斜杠。
正確:index/ 正確:index 錯誤:/index 錯誤:/index/
3.獲取值
請求的url被看做是一個普通的python字符串,進(jìn)行匹配時不包括域名、get或post參數(shù)。 如請求地址如下:
http://127.0.0.1:8000/delete1/?a=10- 1)去除掉域名和參數(shù)部分,并將最前面的/去除后,只剩下如下部分與正則匹配。
- 2)打開booktest/urls.py文件,定義與這個地址匹配的url如下
- 3)在booktest/views.py中創(chuàng)建視圖show_arg。
- 4)啟動服務(wù)器,輸入上面的網(wǎng)址,瀏覽器中效果如下圖。
可以在匹配過程中從url中捕獲參數(shù),每個捕獲的參數(shù)都作為一個普通的python字符串傳遞給視圖。
獲取值需要在正則表達(dá)式中使用小括號,分為兩種方式:
- 位置參數(shù)
- 關(guān)鍵字參數(shù)
注意:兩種參數(shù)的方式不要混合使用,在一個正則表達(dá)式中只能使用一種參數(shù)方式。
- 方式一:位置參數(shù)
直接使用小括號,通過位置參數(shù)傳遞給視圖。
- 1)為了提取參數(shù),修改上面的正則表達(dá)式如下:
- 2)修改視圖show_arg如下:
注意:參數(shù)的名字是任意的如a1、b8,盡量做到見名知意。
def show_arg(request,id):return HttpResponse('show arg %s'%id)- 3)刷新瀏覽器頁面,效果如下圖:
- 4)在地址欄輸入如下地址:
- 5)瀏覽器頁面效果如下圖
- 方式二:關(guān)鍵字參數(shù)
在正則表達(dá)式部分為組命名。
- 1)修改正則表達(dá)式如下:
其中?P部分表示為這個參數(shù)定義的名稱為id,可以是其它名稱,起名做到見名知意。
url(r'^delete(?P<id1>\d+)/$',views.show_arg),- 2)修改視圖show_arg如下
注意:視圖show_arg此時必須要有一個參數(shù)名為id1,否則報錯。
def show_arg(request,id1):return HttpResponse('show %s'%id1)- 3)刷新瀏覽器頁面,效果如下圖
三、HttpReqeust對象
服務(wù)器接收到http協(xié)議的請求后,會根據(jù)報文創(chuàng)建HttpRequest對象,這個對象不需要我們創(chuàng)建,直接使用服務(wù)器構(gòu)造好的對象就可以。視圖的第一個參數(shù)必須是HttpRequest對象,在django.http模塊中定義了HttpRequest對象的API。
1.屬性
下面除非特別說明,屬性都是只讀的。
- path:一個字符串,表示請求的頁面的完整路徑,不包含域名和參數(shù)部分。
- method:一個字符串,表示請求使用的HTTP方法,
常用值包括:'GET'、'POST'。在瀏覽器中給出地址發(fā)出請求采用get方式,如超鏈接。
在瀏覽器中點擊表單的提交按鈕發(fā)起請求,如果表單的method設(shè)置為post則為post請求。
- encoding:一個字符串,表示提交的數(shù)據(jù)的編碼方式。
如果為None則表示使用瀏覽器的默認(rèn)設(shè)置,一般為utf-8。
這個屬性是可寫的,可以通過修改它來修改訪問表單數(shù)據(jù)使用的編碼,接下來對屬性的任何訪問將使用新的encoding值。
- GET:QueryDict類型對象,類似于字典,包含get請求方式的所有參數(shù)。
- POST:QueryDict類型對象,類似于字典,包含post請求方式的所有參數(shù)。
- FILES:一個類似于字典的對象,包含所有的上傳文件。
- COOKIES:一個標(biāo)準(zhǔn)的Python字典,包含所有的cookie,鍵和值都為字符串。
- session:一個既可讀又可寫的類似于字典的對象,表示當(dāng)前的會話,只有當(dāng)Django 啟用會話的支持時才可用
cookies和session都是服務(wù)器和瀏覽器用來保持登陸狀態(tài)的手段
運行服務(wù)器,在瀏覽器中瀏覽首頁,可以在瀏覽器“開發(fā)者工具”中看到請求信息如下圖:
2.示例
接下來演示屬性path、method、encoding
- path、encoding
- 1)打開booktest/views.py文件,代碼如下:
- 2)在templates/booktest/下創(chuàng)建index.html文件,代碼如下:
- 3)打開瀏覽器請求,運行效果如下圖:
- 4)以chrome瀏覽器為例,設(shè)置編碼如下圖,默認(rèn)為utf-8編碼。
- method
- 1)打開booktest/views.py文件,編寫視圖method_show,代碼如下:
- 2)打開booktest/urls.py文件,新增配置如下:
- 3)修改templates/booktest/下創(chuàng)建index.html文件,添加代碼如下:
- 4)打開瀏覽器,輸入如下網(wǎng)址:
- 5)瀏覽效果如下圖:
- 6)點擊鏈接,轉(zhuǎn)到method_show,瀏覽效果如下圖:
- 回到method_test頁面,點擊按鈕,轉(zhuǎn)到method_post,瀏覽效果如下圖,報錯了。
- 8)打開test3/settings.py文件,將MIDDLEWARE_CLASSES項的csrf注釋。
- 9)回瀏覽器刷新
未完待續(xù)…
總結(jié)
以上是生活随笔為你收集整理的Django视图(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Django模型(三)
- 下一篇: Django视图(二)