天天看點

django架構--視圖系統

目錄

視圖函數的作用是,對指定的

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視圖功能定位圖示

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,就是多了渲染的流程。