視圖是 MTV 設計模式中的 V 層,它是實現(xiàn)業(yè)務邏輯的關鍵層,可以用來連接 M 層與 T 層,起著紐帶般的作用,在《Django MTV和MVC的區(qū)別》中也做了相應的介紹,所以它的重要性可想而知。
在 Django 中,視圖函數(shù)是一個 Python 函數(shù)或者類,開發(fā)者主要通過編寫視圖函數(shù)來實現(xiàn)業(yè)務邏輯。視圖函數(shù)首先接受來自瀏覽器或者客戶端的請求,并最終返回響應,視圖函數(shù)返回的響應可以是 HTML 文件,也可以是 HTTP 協(xié)議中的 303 重定向。接下來編寫一個簡單的視圖函數(shù):
from django.http import HttpResponse def Hello_my_django(request): return HttpResponse('html>body>Hello my Django/body>/html>')
下面針對以上 3 行代碼做解析:
1)HttpResponse視圖響應類型
從 django.http 模塊中導入 HttpResponse,從它簡單的名字我們可以得知,它是一種視圖的響應類型。
在HttpResponse對象上擴展的常用方法:
2)視圖函數(shù)參數(shù)request
我們定義了一個名為“Hello_my_django”的函數(shù),Django 規(guī)定了,視圖函數(shù)至少有一個參數(shù),第一個參數(shù)必須是 request,request 是 HttpRequest 請求類型的對象,它攜帶了瀏覽器的請求信息,所以視圖函數(shù)的第一個參數(shù)必須為 request。
當請求一個頁面時,Django 創(chuàng)建一個 HttpRequest對象包含原數(shù)據(jù)的請求。然后 Django 加載適當?shù)囊晥D,通過 HttpRequest作為視圖函數(shù)的第一個參數(shù)。每個視圖負責返回一個HttpResponse目標。
path: 請求頁面的全路徑,不包括域名 method: 請求中使用的HTTP方法的字符串表示。全大寫表示。例如 if req.method=="GET": do_something() elseif req.method=="POST": do_something_else() GET: 包含所有HTTP GET參數(shù)的類字典對象 POST: 包含所有HTTP POST參數(shù)的類字典對象 服務器收到空的POST請求的情況也是可能發(fā)生的,也就是說,表單form通過 HTTP POST方法提交請求,但是表單中可能沒有數(shù)據(jù),因此不能使用 if req.POST來判斷是否使用了HTTP POST 方法;應該使用 if req.method=="POST" COOKIES: 包含所有cookies的標準Python字典對象;keys和values都是字符串。 FILES: 包含所有上傳文件的類字典對象;FILES中的每一個Key都是input type="file" name="" />標簽中 name屬性的值,F(xiàn)ILES中的每一個value同時也是一個標準的python字典對象,包含下面三個Keys: filename: 上傳文件名,用字符串表示 content_type: 上傳文件的Content Type content: 上傳文件的原始內容 user: 是一個django.contrib.auth.models.User對象,代表當前登陸的用戶。如果訪問用戶當前 沒有登陸,user將被初始化為django.contrib.auth.models.AnonymousUser的實例。你 可以通過user的is_authenticated()方法來辨別用戶是否登陸: if req.user.is_authenticated();只有激活Django中的AuthenticationMiddleware 時該屬性才可用 session: 唯一可讀寫的屬性,代表當前會話的字典對象;自己有激活Django中的session支持時該屬性才可用。 META: 一個標準的Python字典包含所有可用的HTTP頭。可用標題取決于客戶端和服務器,但這里是一些例子: CONTENT_LENGTH – 請求體的長度(一個字符串)。 CONTENT_TYPE – 請求體的類型。 HTTP_ACCEPT - 為響應–可以接受的內容類型。 HTTP_ACCEPT_ENCODING – 接受編碼的響應 HTTP_ACCEPT_LANGUAGE – 接受語言的反應 HTTP_HOST – 客戶端發(fā)送的HTTP主機頭。 HTTP_REFERER – 參考頁面 HTTP_USER_AGENT – 客戶端的用戶代理字符串。 QUERY_STRING – 查詢字符串,作為一個單一的(分析的)字符串。 REMOTE_ADDR – 客戶端的IP地址 REMOTE_HOST – 客戶端的主機名 REMOTE_USER – 用戶通過Web服務器的身份驗證。 REQUEST_METHOD – 字符串,如"GET"或"POST" SERVER_NAME – 服務器的主機名 SERVER_PORT – 服務器的端口(一個字符串)。
3)return視圖響應
視圖函數(shù)要返回響應內容,這里的響應內容是我們用 HTML 標簽編寫的,把它作為 HttpResponse 的對象返回給瀏覽器。
上面視圖函數(shù)的代碼雖然區(qū)區(qū)幾行,但是已經(jīng)充分體現(xiàn)了視圖層的實現(xiàn)過程。 Django 收到請求以后,首先創(chuàng)建一個帶有請求信息的 HttpRequset 對象,將 HttpRequest 的對象 request 作為第一個參數(shù)傳遞給視圖函數(shù),視圖接收參數(shù)后繼續(xù)向下執(zhí)行,然后選擇加載對應的視圖,最后返回 HttpResponse 對象給瀏覽器。
通過本節(jié)的介紹,我們應該理解 View 視圖函數(shù)的作用,以及視圖函數(shù)的定義過程。
到此這篇關于Django視圖函數(shù)的具體使用的文章就介紹到這了,更多相關Django視圖函數(shù)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!