1. 程式人生 > >django框架--視圖系統

django框架--視圖系統

需要 del 必須 bubuko 得到 rip get請求 get request

目錄

  • 一、視圖函數的理解
  • 二、視圖函數的定位
  • 三、請求對象HttpRequest
  • 四、響應對象HttpResponse

一、視圖函數的理解

視圖函數的作用是,對指定的url執行業務邏輯,視圖函數將會作為model層和template層的橋梁,最主要的邏輯是操作數據庫以及完成模板渲染前的上下文準備。
視圖系統的模塊:

  1. 請求對象
  2. 業務邏輯
    2.1 連接model
    2.2 連接template
  3. 響應對象

二、視圖函數的定位

所有實現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框架--視圖系統