Django框架(二)
- 請求和響應(yīng)對象
- HttpRequest對象
- HttpResponse對象
本博文主要了解的是MTV模型中的 View(視圖) ,主要負(fù)責(zé)業(yè)務(wù)邏輯,并在適當(dāng)?shù)臅r候調(diào)用Model和Template。
請求和響應(yīng)對象
Django使用請求和響應(yīng)對象來通過系統(tǒng)傳遞狀態(tài)。
當(dāng)請求頁面時,Django創(chuàng)建一個HttpRequest包含有關(guān)請求的元數(shù)據(jù)的對象。然后Django加載適當(dāng)?shù)囊晥D,將HttpRequest第一個參數(shù)傳遞給view函數(shù)。每個視圖都負(fù)責(zé)返回一個HttpResponse對象。
本文介紹了 模塊中定義的API HttpRequest和 HttpResponse對象django.http。
HttpRequest對象
屬性 | 描述 |
---|---|
HttpRequest.scheme | 表示請求方案(http或https 通常)的字符串。 |
HttpRequest.body | 原始HTTP請求主體作為字節(jié)串,例: b’name=jie&sex=man’,它能夠獲取表單數(shù)據(jù) |
HttpRequest.path | 表示所請求頁面的完整路徑的字符串,不包括方案或域。例:/register/ |
HttpRequest. get_full_path() | 表示所請求頁面的完整路徑的字符串,包括get方法取得的表單數(shù)據(jù) |
HttpRequest.method | 表示請求中使用的HTTP方法的字符串。其返回值是 大寫的 。 |
HttpRequest.encoding | 表示用于解碼表單提交數(shù)據(jù)的當(dāng)前編碼的字符串(或者None)您可以寫入此屬性以更改訪問表單數(shù)據(jù)時使用的編碼。任何后續(xù)屬性訪問(例如從GET或讀取POST)都將使用新encoding值。如果您知道表單數(shù)據(jù)不在DEFAULT_CHARSET 編碼中,則非常有用。 |
HttpRequest.GET | 類似字典的對象,包含所有給定的HTTP GET參數(shù)。 |
HttpRequest.POST | 類似字典的對象,包含所有給定的HTTP POST參數(shù),前提是請求包含表單數(shù)據(jù)。如果您需要訪問請求中發(fā)布的原始或非表單數(shù)據(jù),請通過該HttpRequest.body屬性訪問該數(shù)據(jù) 。服務(wù)器收到空的POST請求的情況也是可能發(fā)生的,也就是說,表單form通過HTTP POST方法提交請求,但是表單中可能沒有數(shù)據(jù),因此不能使用 if req.POST來判斷是否使用了HTTP POST 方法;應(yīng)該使用 if req.method=="POST" |
HttpRequest.COOKIES | 包含所有cookie的字典。鍵和值是字符串。 |
HttpRequest.FILES | 包含所有上傳文件的類字典對象;FILES中的每一個Key都是標(biāo)簽中 name屬性的值,F(xiàn)ILES中的每一個value同時也是一個標(biāo)準(zhǔn)的python字典對象,包含下面三個Keys:1. filename: 上傳文件名,用字符串表示;2.content_type: 上傳文件的Content Type;3. content: 上傳文件的原始內(nèi)容 |
user | 是一個django.contrib.auth.models.User對象,代表當(dāng)前登陸的用戶。如果訪問用戶當(dāng)前沒有登陸,user將被初始化為django.contrib.auth.models.AnonymousUser的實(shí)例。你可以通過user的is_authenticated()方法來辨別用戶是否登陸:if req.user.is_authenticated();只有激活Django中的AuthenticationMiddleware時該屬性才可用 |
session | 唯一可讀寫的屬性,代表當(dāng)前會話的字典對象;自己有激活Django中的session支持時該屬性才可用。 |
HttpRequest.headers | 一個不區(qū)分大小寫的類似dict的對象,它提供對請求中所有HTTP加前綴的標(biāo)題(加號Content-Length和Content-Type)的訪問。 |
HttpResponse對象
對于HttpRequest對象來說,是由django自動創(chuàng)建的,但是,HttpResponse對象就必須我們自己創(chuàng)建。每個view請求處理方法必須返回一個HttpResponse對象。
HttpResponse類在django.http.HttpResponse
在HttpResponse對象上擴(kuò)展的常用方法:
方法 | 描述 |
---|---|
render()以及render_to_response() | 頁面渲染 |
redirect(“路徑”) | 頁面跳轉(zhuǎn) |
locals() | 可以直接將函數(shù)中所有的變量傳給模板 |
render和redirect的區(qū)別:
render 返回頁面內(nèi)容(渲染變量到模板中),并且沒有發(fā)送第二次請求,不會修改URL的地址。
redirect 發(fā)送了第二次請求,是個跳轉(zhuǎn)函數(shù),而且會返回302的狀態(tài)碼。
模板對象調(diào)用render方法,將context對象加載渲染到template模板對象中,得到的結(jié)果是一個HTML文檔。
-----------------------------------url.py
url(r"login", views.login),
url(r"jie_back", views.jie_back),
-----------------------------------views.py
def login(req):
if req.method=="POST":
if 1:
name="jie"
# return redirect("/jie_back/")
return render(req,"my backend.html",locals())
return render(req,"login.html",locals())
def jie_back(req):
name="杰"
return render(req,"my backend.html",locals())
-----------------------------------login.html
-----------------------------------my backend.html
用戶{{ name }}你好
這個示例中,我們要測試
return redirect("/jie_back/")
和
return render(req,"my backend.html",locals())
的區(qū)別,url是否發(fā)生了變化.
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
