服務器接收到http協議的請求後,會根據報文建立HttpRequest對象,這個對象不須要咱們建立,直接使用服務器構造好的對象就能夠。視圖的第一個參數必須是HttpRequest對象,在django.http模塊中定義了HttpRequest對象的API。javascript
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 啓用會話的支持時纔可用,詳細內容見"狀態保持"。
定義在django.http.QueryDict
HttpRequest對象的屬性GET、POST都是QueryDict類型的對象
與python字典不一樣,QueryDict類型的對象用來處理同一個鍵帶有多個值的狀況
方法get():根據鍵獲取值
若是一個鍵同時擁有多個值將獲取最後一個值
若是鍵不存在則返回None值,能夠設置默認值進行後續處理
dict.get('鍵',默認值) 可簡寫爲 dict['鍵']
方法getlist():根據鍵獲取值,值以列表返回,能夠獲取指定鍵的全部值
若是鍵不存在則返回空列表[],能夠設置默認值進行後續處理
dict.getlist('鍵',默認值)
請求格式:在請求地址末尾使用?,以後以「鍵=值」的格式拆分,多個鍵值對之間以&鏈接。
例:網址以下
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類型的對象,鍵和值都是字符串類型。
鍵是開發人員在編寫代碼時肯定下來的。
值是根據數據生成的。
使用form表單請求時,方法方式爲post繼承發起post方式的請求,須要使用HttpRequest對象的POST屬性接收參數,POST屬性是一個QueryDict類型的對象。
表單form如何提交參數呢?
表單控件名稱屬性的值做爲鍵,值屬性的變量值,構成鍵值對提交。
若是表單控件沒有名稱屬性則不提交。
對於複選框控件,名稱屬性的值相同爲一組,被指定的項會被提交,出現一鍵多值的狀況。
鍵是表單控件名稱屬性的值,是由開發人員編寫的。
值是用戶填寫或選擇的。
視圖在接收請求並處理後,必須返回HttpResponse對象或子對象。在django.http模塊中定義了HttpResponse對象的API。HttpRequest對象由Django建立,HttpResponse對象由開發人員建立。
content:表示返回的內容。
charset:表示response採用的編碼字符集,默認爲utf-8。
status_code:返回的HTTP響應狀態碼。
content-type:指定返回數據的的MIME類型,默認爲'text/html'。
_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:向響應體中寫數據。
在瀏覽器中使用javascript發起ajax請求時,返回json格式的數據,此處以jquery的get()方法爲例。類JsonResponse繼承自HttpResponse對象,被定義在django.http模塊中,建立對象時接收字典做爲參數。
JsonResponse對象的content-type爲'application/json'。
當一個邏輯處理完成後,不須要向客戶端呈現數據,而是轉回到其它頁面,如添加成功、修改爲功、刪除成功後顯示數據列表,而數據的列表視圖已經開發完成,此時不須要從新編寫列表的代碼,而是轉到這個視圖就能夠,此時就須要模擬一個用戶請求的效果,從一個視圖轉到另一個視圖,就稱爲重定向。
Django中提供了HttpResponseRedirect對象實現重定向功能,這個類繼承自HttpResponse,被定義在django.http模塊中,返回的狀態碼爲302。
在django.shortcuts模塊中爲重定向類提供了簡寫函數redirect。
修改booktest/views.py文件中red1視圖,代碼以下:
from django.shortcuts import redirect ... def red1(request): return redirect('/')