django框架--視圖系統
目錄
- 一、視圖函數的理解
- 二、視圖函數的定位
- 三、請求對象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框架--視圖系統