1. 程式人生 > >Django框架之獲取客戶端傳送的資料

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

提取碼:o4xn

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)