2013-07-02 54 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'))