標籤:圖片 虛擬碼 ica 方式 *args 系統 封裝 進一步 應對
目錄
- 一、視圖函數的理解
- 二、視圖函數的定位
- 三、請求對象HttpRequest
- 四、響應對象HttpResponse
一、視圖函數的理解
視圖函數的作用是,對指定的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響應對象。
所以視圖函數中,除了處理邏輯之外,還有兩個重要的對象,就是請求對象和響應對象。
三、請求對象
HttpRequest
請求對象就是對http請求報文的封裝,django自動執行封裝並傳入視圖函數第一參數,我們需要在視圖函數中調用。
請求對象中有很多需要被進一步處理的資料,常用的介面如下:
常用介面:HttpRequest.method 要求方法HttpRequest.GET 對應GET請求類型的資料字典HttpRequest.POST 對應POST請求類型的資料字典HttpRequest.path 請求的路徑HttpRequest.get_full_path() 請求的路徑+get資料HttpRequest.is_ajax() 判斷是否為ajax形式的請求
四、響應對象
HttpResponse
響應對象就是對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,就是多了渲染的流程。
django架構--視圖系統