2013-07-02 92 views
3

我只設置了Django的Apache服務器,並對其進行測試,在views.py如何從請求中獲取POST數據?

channel = rabbit_connection() 
@csrf_protect 
@csrf_exempt 
def index(request): 
    data={'text': 'Food truck is awesome! ', 'email': '[email protected]', 'name': 'Bob'} 
    callback(json.dumps(data)) 
    context = RequestContext(request)  
    return render_to_response('index.html', context_instance=context) 

此功能工作正常,如果我發送GETPOST請求給服務器做了一個很簡單的功能。不過,我想從POST的請求中獲取這些數據。假設我發送的請求是這樣的:

import pycurl 
import simplejson as json 

data = json.dumps({'name':'Bob', 'email':'[email protected]', 'text': u"Food truck is awesome!"}) 

c = pycurl.Curl() 
c.setopt(c.URL, 'http://ec2-54-......compute-1.amazonaws.com/index.html') 
c.setopt(c.POSTFIELDS, data) 
c.setopt(c.VERBOSE, True) 

for i in range(100): 
    c.perform() 

我想有在視圖中是這樣的:

if request.method == 'POST': 
    data = ?????? # Something that will return me my dictionary 

以防萬一: 它總是會在JSON格式和領域是未知的。

回答

4

data= request.POST.get('data','')

會從你的字典回報你一個值(鍵= data)。如果你想要整個字典,你只需使用request.POST。您在此處使用QueryDict類:

在HttpRequest對象中,GET和POST屬性是django.http.QueryDict的實例。 QueryDict是一個類似字典的類,用於處理同一個鍵的多個值。這是必要的,因爲一些HTML表單元素特別爲相同的鍵傳遞多個值。

QueryDict實例是不可變的,除非您創建它們的副本()。這意味着你不能直接改變request.POST和request.GET的屬性。

- Django Docs

+0

嗨@JcKelley,據我瞭解上面的語句將得到的值數據?正確?但是我的JSON中沒有價值數據 – Vor

+0

這會從字典中獲取關鍵值。所以'name = request.POST.get('name','')'會返回'name'變量「Bob」 – JcKelley

+0

正好,但是如何返回整個字典呢? – Vor

0

如果公佈的數據是JSON格式,你需要反序列化:

import simplejson 
myDict = simplejson.loads(request.POST.get('data'))