Django框架之獲取客戶端傳送的資料
在Django框架中,我們可以獲取到很多的資料;接下來我就為大家介紹一下如何獲取客戶端傳送的資料。
1. 根據正則表示式匹配url中的資料
在子路由中根據正則表示式匹配到url中的資料,並傳遞給檢視函式
通過位置引數,給檢視函式進行傳參
url(r'^index/([a-zA-Z]+)/(\d+)',views.檢視函式名,name='檢視函式名')
通過關鍵字引數,給檢視函式進行傳參
url(r'^index/(?P<引數1>[a-zA-Z]+)/(?P<引數2>\d+)',views.檢視函式名,name='檢視函式名')
這裡給大家明確一下概念:
查詢字串:url中的引數
查詢字典:有request物件的GET、POST屬性獲取到的資料
非表單資料:JSON資料、XML資料
以下是利用客戶端的請求物件request進行獲取資料的基本操作流程。
2. 利用request物件獲取url中的查詢字串
查詢字串就是url地址中?後面的資料,如:http://www.baidu.com/?name=tom&age=22&sex=male
其中name=tom&age=22&sex=male就是查詢字串。
我們可以通過request物件的GET屬性獲取由查詢字串組成的字典,然後進行相應的操作。
查詢字典(QueryDict)由兩個方法:get()方法獲取單一的鍵的值、getlist()方法獲取一個鍵對應的多個值、字典名[‘’鍵名]。
def index(request): # 獲取查詢字典 data = request.GET name = data.get('key') age = str(data.get('key')) content = name + ' ' + age hobby = data.getlist('key') return HttpResponse(content)
注意:
以下操作推薦使用PSOTMAN軟體進行測試,在測試之前需要關閉Django框架中的CSRF防護功能。
POSTMAN下載地址:
連結:https://pan.baidu.com/s/1JtI-Deu-xmHx6dTZ-INTTQ
3. 獲取請求體中的Form表單資料
利用request物件的POST屬性,可以獲取到請求體中的Form表單中的資料組成的查詢字典。
查詢字典(QueryDict)由三個方法:get()方法獲取單一的鍵的值、getlist()方法獲取一個鍵對應的多個值、字典名[‘’鍵名]。
def index(request): # 獲取請求體中的Form表單資料 # requerst.POST中的POST是屬性 # 獲取查詢字典 data = request.POST content = '<h1>name:%s age:%s</h1>' % (data['name'], data['age']) return HttpResponse(content)
4. 獲取請求體中的非表單資料(JSON資料)
利用request物件的body屬性,可以獲取到請求體中的非表單資料(位元組流的JSON字串)。
import json def index(request): json_str = request.body.decode() # 將獲取到的JSON字串轉換成字典 json_dict = json.loads(json_str) content = json_dict['key'] return HttpResponse(content)
5. 獲取請求頭中的資料
利用request物件的MATE屬性,可以獲取到請求頭中的所有資料並組成一個普通字典。
這裡提一點,HTTP協議的請求行、請求頭、請求體是我們人為劃分出來的,在實際傳輸中只有一個請求頭。
def index(request): data_dict = request.META print(type(data_dict)) content = '' for key in data_dict: content += str(key) + '----->' + str(data_dict.get(key)) + '<br>' return HttpResponse(content)