視圖的第一個參數必須是HttpRequest對象
在視圖函數中,接收的request有如下屬性:
- path:一個字符串,表示請求的頁面的完整路徑,不包含域名。
- method:一個字符串,表示請求使用的HTTP方法,常用值包括:'GET'、'POST'。
- 在瀏覽器中給出地址發出請求采用get方式,如超鏈接。
- 在瀏覽器中點擊表單的提交按鈕發起請求,如果表單的method設置為post則為post請求。
- encoding:一個字符串,表示提交的數據的編碼方式。
- 如果為None則表示使用瀏覽器的默認設置,一般為utf-8。
- 這個屬性是可寫的,可以通過修改它來修改訪問表單數據使用的編碼,接下來對屬性的任何訪問將使用新的encoding值。
- GET:一個類似於字典的對象,包含get請求方式的所有參數。
- POST:一個類似於字典的對象,包含post請求方式的所有參數。
- FILES:一個類似於字典的對象,包含所有的上傳文件。
- COOKIES:一個標准的Python字典,包含所有的cookie,鍵和值都為字符串。
- session:一個既可讀又可寫的類似於字典的對象,表示當前的會話,只有當Django 啟用會話的支持時才可用,詳細內容見"狀態保持"。
QueryDict對象
GET和POST請求中,視圖request獲取的QueryDic對象:
- 定義在django.http.QueryDict
- HttpRequest對象的屬性GET、POST都是QueryDict類型的對象
- 與python字典不同,QueryDict類型的對象用來處理同一個鍵帶有多個值的情況
- 方法get():根據鍵獲取值
- 如果一個鍵同時擁有多個值將獲取最后一個值
- 如果鍵不存在則返回None值,可以設置默認值進行后續處理
dict.get('鍵',默認值) #可簡寫為 dict['鍵']
- 方法getlist():根據鍵獲取值,值以列表返回,可以獲取指定鍵的所有值
- 如果鍵不存在則返回空列表[],可以設置默認值進行后續處理
dict.getlist('鍵',默認值)
GET屬性
請求格式:在請求地址結尾使用?,之后以“鍵=值”的格式拼接,多個鍵值對之間以&連接。
例:網址如下
http://www.itcast.cn/?a=10&b=20&c=python
其中的請求參數為:
a=10&b=20&c=python
- 分析請求參數,鍵為'a'、'b'、'c',值為'10'、'20'、'python'。
- 在Django中可以使用HttpRequest對象的GET屬性獲得get方方式請求的參數。
- GET屬性返回QueryDict類型的對象,鍵和值都是字符串類型。
- 鍵是開發人員在編寫代碼時確定下來的。
- 值是根據數據生成的。
POST屬性
使用form表單請求時,method方式為post則會發起post方式的請求,需要使用HttpRequest對象的POST屬性接收參數,POST屬性返回QueryDict類型的對象。
問:表單form如何提交參數呢?
答:控件name屬性的值作為鍵,value屬性的值為值,構成鍵值對提交。
- 如果控件沒有name屬性則不提交。
- 對於checkbox控件,name屬性的值相同為一組,被選中的項會被提交,出現一鍵多值的情況。
- 鍵是控件name屬性的值,是由開發人員編寫的。
- 值是用戶填寫或選擇的。
接收POST和GET請求獲取數據的方式:
#接收請求參數 def show_reqarg(request): if request.method == 'GET': a = request.GET.get('a') #獲取請求參數a b = request.GET.get('b') #獲取請求參數b c = request.GET.get('c') #獲取請求參數c return render(request, 'booktest/show_getarg.html', {'a':a, 'b':b, 'c':c}) else: name = request.POST.get('uname') #獲取name gender = request.POST.get('gender') #獲取gender hobbys = request.POST.getlist('hobby') #獲取hobby return render(request, 'booktest/show_postarg.html', {'name':name, 'gender':gender, 'hobbys':hobbys})