Django視圖函數(shù)的具體使用
視圖是 MTV 設(shè)計(jì)模式中的 V 層,它是實(shí)現(xiàn)業(yè)務(wù)邏輯的關(guān)鍵層,可以用來(lái)連接 M 層與 T 層,起著紐帶般的作用,在《Django MTV和MVC的區(qū)別》中也做了相應(yīng)的介紹,所以它的重要性可想而知。
1. 第一個(gè)視圖函數(shù)
在 Django 中,視圖函數(shù)是一個(gè) Python 函數(shù)或者類(lèi),開(kāi)發(fā)者主要通過(guò)編寫(xiě)視圖函數(shù)來(lái)實(shí)現(xiàn)業(yè)務(wù)邏輯。視圖函數(shù)首先接受來(lái)自瀏覽器或者客戶(hù)端的請(qǐng)求,并最終返回響應(yīng),視圖函數(shù)返回的響應(yīng)可以是 HTML 文件,也可以是 HTTP 協(xié)議中的 303 重定向。接下來(lái)編寫(xiě)一個(gè)簡(jiǎn)單的視圖函數(shù):
from django.http import HttpResponse def Hello_my_django(request): return HttpResponse('<html><body>Hello my Django</body></html>')
下面針對(duì)以上 3 行代碼做解析:
1)HttpResponse視圖響應(yīng)類(lèi)型
從 django.http 模塊中導(dǎo)入 HttpResponse,從它簡(jiǎn)單的名字我們可以得知,它是一種視圖的響應(yīng)類(lèi)型。
在HttpResponse對(duì)象上擴(kuò)展的常用方法:
- - 頁(yè)面渲染:render(推薦),render_to_response,
- - 頁(yè)面跳轉(zhuǎn):redirect
- - locals: 可以直接將對(duì)應(yīng)視圖函數(shù)中所有的變量傳給模板
2)視圖函數(shù)參數(shù)request
我們定義了一個(gè)名為“Hello_my_django”的函數(shù),Django 規(guī)定了,視圖函數(shù)至少有一個(gè)參數(shù),第一個(gè)參數(shù)必須是 request,request 是 HttpRequest 請(qǐng)求類(lèi)型的對(duì)象,它攜帶了瀏覽器的請(qǐng)求信息,所以視圖函數(shù)的第一個(gè)參數(shù)必須為 request。
當(dāng)請(qǐng)求一個(gè)頁(yè)面時(shí),Django 創(chuàng)建一個(gè) HttpRequest對(duì)象包含原數(shù)據(jù)的請(qǐng)求。然后 Django 加載適當(dāng)?shù)囊晥D,通過(guò) HttpRequest作為視圖函數(shù)的第一個(gè)參數(shù)。每個(gè)視圖負(fù)責(zé)返回一個(gè)HttpResponse目標(biāo)。
path: 請(qǐng)求頁(yè)面的全路徑,不包括域名 method: 請(qǐng)求中使用的HTTP方法的字符串表示。全大寫(xiě)表示。例如 if req.method=="GET": do_something() elseif req.method=="POST": do_something_else() GET: 包含所有HTTP GET參數(shù)的類(lèi)字典對(duì)象 POST: 包含所有HTTP POST參數(shù)的類(lèi)字典對(duì)象 服務(wù)器收到空的POST請(qǐng)求的情況也是可能發(fā)生的,也就是說(shuō),表單form通過(guò) HTTP POST方法提交請(qǐng)求,但是表單中可能沒(méi)有數(shù)據(jù),因此不能使用 if req.POST來(lái)判斷是否使用了HTTP POST 方法;應(yīng)該使用 if req.method=="POST" COOKIES: 包含所有cookies的標(biāo)準(zhǔn)Python字典對(duì)象;keys和values都是字符串。 FILES: 包含所有上傳文件的類(lèi)字典對(duì)象;FILES中的每一個(gè)Key都是<input type="file" name="" />標(biāo)簽中 name屬性的值,F(xiàn)ILES中的每一個(gè)value同時(shí)也是一個(gè)標(biāo)準(zhǔn)的python字典對(duì)象,包含下面三個(gè)Keys: filename: 上傳文件名,用字符串表示 content_type: 上傳文件的Content Type content: 上傳文件的原始內(nèi)容 user: 是一個(gè)django.contrib.auth.models.User對(duì)象,代表當(dāng)前登陸的用戶(hù)。如果訪問(wèn)用戶(hù)當(dāng)前 沒(méi)有登陸,user將被初始化為django.contrib.auth.models.AnonymousUser的實(shí)例。你 可以通過(guò)user的is_authenticated()方法來(lái)辨別用戶(hù)是否登陸: if req.user.is_authenticated();只有激活Django中的AuthenticationMiddleware 時(shí)該屬性才可用 session: 唯一可讀寫(xiě)的屬性,代表當(dāng)前會(huì)話的字典對(duì)象;自己有激活Django中的session支持時(shí)該屬性才可用。 META: 一個(gè)標(biāo)準(zhǔn)的Python字典包含所有可用的HTTP頭。可用標(biāo)題取決于客戶(hù)端和服務(wù)器,但這里是一些例子: CONTENT_LENGTH – 請(qǐng)求體的長(zhǎng)度(一個(gè)字符串)。 CONTENT_TYPE – 請(qǐng)求體的類(lèi)型。 HTTP_ACCEPT - 為響應(yīng)–可以接受的內(nèi)容類(lèi)型。 HTTP_ACCEPT_ENCODING – 接受編碼的響應(yīng) HTTP_ACCEPT_LANGUAGE – 接受語(yǔ)言的反應(yīng) HTTP_HOST – 客戶(hù)端發(fā)送的HTTP主機(jī)頭。 HTTP_REFERER – 參考頁(yè)面 HTTP_USER_AGENT – 客戶(hù)端的用戶(hù)代理字符串。 QUERY_STRING – 查詢(xún)字符串,作為一個(gè)單一的(分析的)字符串。 REMOTE_ADDR – 客戶(hù)端的IP地址 REMOTE_HOST – 客戶(hù)端的主機(jī)名 REMOTE_USER – 用戶(hù)通過(guò)Web服務(wù)器的身份驗(yàn)證。 REQUEST_METHOD – 字符串,如"GET"或"POST" SERVER_NAME – 服務(wù)器的主機(jī)名 SERVER_PORT – 服務(wù)器的端口(一個(gè)字符串)。
3)return視圖響應(yīng)
視圖函數(shù)要返回響應(yīng)內(nèi)容,這里的響應(yīng)內(nèi)容是我們用 HTML 標(biāo)簽編寫(xiě)的,把它作為 HttpResponse 的對(duì)象返回給瀏覽器。
2. 視圖函數(shù)執(zhí)行過(guò)程
上面視圖函數(shù)的代碼雖然區(qū)區(qū)幾行,但是已經(jīng)充分體現(xiàn)了視圖層的實(shí)現(xiàn)過(guò)程。 Django 收到請(qǐng)求以后,首先創(chuàng)建一個(gè)帶有請(qǐng)求信息的 HttpRequset 對(duì)象,將 HttpRequest 的對(duì)象 request 作為第一個(gè)參數(shù)傳遞給視圖函數(shù),視圖接收參數(shù)后繼續(xù)向下執(zhí)行,然后選擇加載對(duì)應(yīng)的視圖,最后返回 HttpResponse 對(duì)象給瀏覽器。
通過(guò)本節(jié)的介紹,我們應(yīng)該理解 View 視圖函數(shù)的作用,以及視圖函數(shù)的定義過(guò)程。
到此這篇關(guān)于Django視圖函數(shù)的具體使用的文章就介紹到這了,更多相關(guān)Django視圖函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python錯(cuò)誤提示:[Errno 24] Too many open files的分析與解決
這篇文章主要給大家介紹了Python中出現(xiàn)錯(cuò)誤提示:[Errno 24] Too many open files的分析與解決,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-02-02詳解Python3 對(duì)象組合zip()和回退方式*zip
這篇文章主要介紹了Python3 對(duì)象組合zip()和回退方式*zip詳解,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-05-05numba提升python運(yùn)行速度的實(shí)例方法
在本篇文章里小編給大家整理的是一篇關(guān)于numba提升python運(yùn)行速度的實(shí)例方法,有興趣的朋友們可以參考下。2021-01-01自定義Django_rest_framework_jwt登陸錯(cuò)誤返回的解決
這篇文章主要介紹了自定義Django_rest_framework_jwt登陸錯(cuò)誤返回的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10Python使用pymysql模塊操作mysql增刪改查實(shí)例分析
這篇文章主要介紹了Python使用pymsql模塊操作mysql增刪改查,結(jié)合實(shí)例形式分析了Python使用pymsql模塊針對(duì)mysql進(jìn)行增刪改查操作的相關(guān)實(shí)現(xiàn)方法與操作注意事項(xiàng),需要的朋友可以參考下2019-12-12深入了解Python中反射和動(dòng)態(tài)屬性的無(wú)限可能
理解 Python 中的反射和動(dòng)態(tài)屬性是編寫(xiě)靈活和強(qiáng)大程序的關(guān)鍵,在這篇文章中,小編將帶領(lǐng)大家一起反射和動(dòng)態(tài)屬性的概念,并提供大量示例代碼,希望對(duì)大家有所幫助2023-11-11Python?Pandas讀取csv/tsv文件(read_csv,read_table)的區(qū)別
這篇文章主要給大家介紹了關(guān)于Python?Pandas讀取csv/tsv文件(read_csv,read_table)區(qū)別的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Pandas具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-01-01Sublime開(kāi)發(fā)python程序的示例代碼
本篇文章主要介紹了Sublime開(kāi)發(fā)python程序的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-01-01