Django框架(九):視圖(二) HttpRequest對象、HttpResponse對象

1. HttpRequest對象

服務器接收到http協議的請求後,會根據報文建立HttpRequest對象,這個對象不須要咱們建立,直接使用服務器構造好的對象就能夠。視圖的第一個參數必須是HttpRequest對象,在django.http模塊中定義了HttpRequest對象的API。javascript

1.1 屬性 

path:一個字符串,表示請求的頁面的完整路徑,不包含域名和參數部分。html

method:一個字符串,表示請求使用的HTTP方法,經常使用值包括:'GET'、'POST'。java

在瀏覽器中給出地址發出請求採用get方式,如超連接。python

在瀏覽器中點擊表單的提交按鈕發起請求,若是表單的method設置爲post則爲post請求。jquery

encoding:一個字符串,表示提交的數據的編碼方式。ajax

若是爲None則表示使用瀏覽器的默認設置,通常爲utf-8。django

這個屬性是可寫的,能夠經過修改它來修改訪問表單數據使用的編碼,接下來對屬性的任何訪問將使用新的encoding值。json

GET:QueryDict類型對象,相似於字典,包含get請求方式的全部參數。瀏覽器

POST:QueryDict類型對象,相似於字典,包含post請求方式的全部參數。服務器

FILES:一個相似於字典的對象,包含全部的上傳文件。

COOKIES:一個標準的Python字典,包含全部的cookie,鍵和值都爲字符串。

session:一個既可讀又可寫的相似於字典的對象,表示當前的會話,只有當Django 啓用會話的支持時纔可用,詳細內容見"狀態保持"。

1.2 QueryDict對象 

定義在django.http.QueryDict

HttpRequest對象的屬性GET、POST都是QueryDict類型的對象

與python字典不一樣,QueryDict類型的對象用來處理同一個鍵帶有多個值的狀況

方法get():根據鍵獲取值

若是一個鍵同時擁有多個值將獲取最後一個值

若是鍵不存在則返回None值,能夠設置默認值進行後續處理

dict.get('',默認值)
可簡寫爲
dict['']

方法getlist():根據鍵獲取值,值以列表返回,能夠獲取指定鍵的全部值

若是鍵不存在則返回空列表[],能夠設置默認值進行後續處理

dict.getlist('',默認值)

1.3 GET屬性

請求格式:在請求地址末尾使用?,以後以「鍵=值」的格式拆分,多個鍵值對之間以&鏈接。

例:網址以下

https://search.jd.com/Search?keyword=%E7%AC%94%E8%AE%B0%E6%9C%AC&enc=utf-8&wq=%E7%AC%94%E8%AE%B0%E6%9C%AC&pvid=e6ed133c7c1f4286b8579fed9c36e187

其中的請求參數爲:

keyword=%E7%AC%94%E8%AE%B0%E6%9C%AC&enc=utf-8&wq=%E7%AC%94%E8%AE%B0%E6%9C%AC&pvid=e6ed133c7c1f4286b8579fed9c36e187

分析請求參數,鍵爲'a','b','c',轉化爲'10','20','python'。

在Django中可使用HttpRequest對象的GET屬性得到get方方式請求的參數。

GET屬性是一個QueryDict類型的對象,鍵和值都是字符串類型。

鍵是開發人員在編寫代碼時肯定下來的。

值是根據數據生成的。

1.4 POST屬性

使用form表單請求時,方法方式爲post繼承發起post方式的請求,須要使用HttpRequest對象的POST屬性接收參數,POST屬性是一個QueryDict類型的對象。

表單form如何提交參數呢?

表單控件名稱屬性的值做爲鍵,值屬性的變量值,構成鍵值對提交。

若是表單控件沒有名稱屬性則不提交。

對於複選框控件,名稱屬性的值相同爲一組,被指定的項會被提交,出現一鍵多值的狀況。

鍵是表單控件名稱屬性的值,是由開發人員編寫的。

值是用戶填寫或選擇的。

2. HttpResponse對象

視圖在接收請求並處理後,必須返回HttpResponse對象或子對象。在django.http模塊中定義了HttpResponse對象的API。HttpRequest對象由Django建立,HttpResponse對象由開發人員建立。

2.1 屬性

content:表示返回的內容。

charset:表示response採用的編碼字符集,默認爲utf-8。

status_code:返回的HTTP響應狀態碼。

content-type:指定返回數據的的MIME類型,默認爲'text/html'。

2.2 方法

_init_:建立HttpResponse對象後完成返回內容的初始化。

set_cookie:設置Cookie信息。

set_cookie(key, value='', max_age=None, expires=None)

cookie是網站以鍵值對格式存儲在瀏覽器中的一段純文本信息,用於實現用戶跟蹤。

max_age是一個整數,表示在指定秒數後過時。

expires是一個datetime或timedelta對象,會話將在這個指定的日期/時間過時。

max_age與expires二選一。

若是不指定過時時間,在關閉瀏覽器時cookie會過時。

delete_cookie(key):刪除指定的key的Cookie,若是key不存在則什麼也不發生。

write:向響應體中寫數據。

2.3 子類JsonResponse

在瀏覽器中使用javascript發起ajax請求時,返回json格式的數據,此處以jquery的get()方法爲例。類JsonResponse繼承自HttpResponse對象,被定義在django.http模塊中,建立對象時接收字典做爲參數。

JsonResponse對象的content-type爲'application/json'。

2.4 子類HttpResponseRedirect

當一個邏輯處理完成後,不須要向客戶端呈現數據,而是轉回到其它頁面,如添加成功、修改爲功、刪除成功後顯示數據列表,而數據的列表視圖已經開發完成,此時不須要從新編寫列表的代碼,而是轉到這個視圖就能夠,此時就須要模擬一個用戶請求的效果,從一個視圖轉到另一個視圖,就稱爲重定向。

Django中提供了HttpResponseRedirect對象實現重定向功能,這個類繼承自HttpResponse,被定義在django.http模塊中,返回的狀態碼爲302。

重定向簡寫函數redirect

在django.shortcuts模塊中爲重定向類提供了簡寫函數redirect。

修改booktest/views.py文件中red1視圖,代碼以下:

from django.shortcuts import redirect
...
def red1(request):
    return redirect('/')
相關文章
相關標籤/搜索