目錄
視圖函數的作用是,對指定的
url
執行業務邏輯,視圖函數将會作為
model
層和
template
層的橋梁,最主要的邏輯是操作資料庫以及完成模闆渲染前的上下文準備。
視圖系統的子產品:
- 請求對象
-
業務邏輯
2.1 連接配接
model
層
2.2 連接配接
template
- 響應對象
所有實作
wsgi
協定的
web
架構都必須實作如下接口形式的
application
函數,完成對
http
請求的
http
響應,
web
應用程式和
web
伺服器的分界即從此函數開始。
application
函數在
web
應用程式中被定義,而在
wsgi
伺服器(
web
伺服器)上被無限循環調用,在
django
中,
application
函數中會通過路由系統根據
url
來尋找對應的
view
,然後執行
view
視圖函數處理業務邏輯。
# 僞代碼
def application(environ, start_response):
# 此函數在web應用程式上被定義,在web伺服器上被無限循環調用
view = route(environ.url) # 路由系統
response = view(environ, *args, **kw) # 視圖系統
return response
django視圖功能定位圖示

視圖函數的本質作用就是:接收一個
reqeust
請求,正确處理,然後傳回一個
reponse
響應。
為了友善在視圖函數中處理請求與響應,
reqeust
請求封包在
web
架構中被封裝成
HttpRequest
請求對象,而
reponse
響應封包也被封裝成
HttpResponse
響應對象。
是以視圖函數中,除了處理邏輯之外,還有兩個重要的對象,就是請求對象和響應對象。
請求對象就是對
http
請求封包的封裝,
django
自動執行封裝并傳入視圖函數第一參數,我們需要在視圖函數中調用。
請求對象中有很多需要被進一步處理的資料,常用的接口如下:
常用接口:
HttpRequest.method 請求方法
HttpRequest.GET 對應GET請求類型的資料字典
HttpRequest.POST 對應POST請求類型的資料字典
HttpRequest.path 請求的路徑
HttpRequest.get_full_path() 請求的路徑+get資料
HttpRequest.is_ajax() 判斷是否為ajax形式的請求
響應對象就是對
http
響應封包的封裝,響應對象需要我們在視圖函數中建立,并在視圖函數最後
return
給上層函數即底層控制循環。響應對象意味着
web
服務程式通過業務邏輯處理後傳回的響應資訊。
在視圖函數中傳回響應對象主要有兩種形式的方法:
方式1: 以字元串字面量為接口:
return HttpResponse('xxx')
,直接傳回的字元串會作為
html
頁面的内容,會被浏覽器所執行,即,可以傳回一個
<h1>xxx</h1>
方式2: 以
html
檔案或模闆檔案為接口:
return render(request, 'index.html', {xxx})
,可以直接傳回最終形态的
html
字元串。通過
render
函數調用渲染引擎對模闆檔案執行渲染操作,
模闆檔案中包含模闆文法,這些模闆文法被認為是
html
檔案中的占位符,用于後續填充動态資料,
render
函數内部最後會執行
return HttpResponse
操作。
注意:為了提高安全性,
render
函數在處理
{xxx}
渲染上下文時,如果包含有可執行的
html
資料的時候會自動轉義成特殊字元,這主要是為了防止插入類似
link
或者
script
等這些浏覽器會執行的
html
代碼給用戶端帶來的安全性問題。
render
函數流程是進行渲染得到
http
響應封包中的響應體字元串,然後再傳回一個
HttpResponse
對象,這相對于方式1,就是多了渲染的流程。