7

我刚刚用 django 建立了一个 apache 服务器,为了测试它,在 views.py 中做了一个非常简单的函数

channel = rabbit_connection()
@csrf_protect
@csrf_exempt
def index(request): 
    data={'text': 'Food truck is awesome! ', 'email': 'bob@yahoo.com', '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':'bob@yahoo.com', '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

2 回答 2

6

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

data将从您的字典中返回一个值(key= )。如果你想要整个字典,你只需使用request.POST. 您在这里使用 QueryDict 类:

在 HttpRequest 对象中,GET 和 POST 属性是 django.http.QueryDict 的实例。QueryDict 是一个类字典类,定制用于处理同一个键的多个值。这是必要的,因为某些 HTML 表单元素,特别是 为同一个键传递多个值。

QueryDict 实例是不可变的,除非您创建它们的 copy()。这意味着您不能直接更改 request.POST 和 request.GET 的属性。

- Django 文档

于 2013-07-02T19:12:05.223 回答
1

如果发布的数据是 JSON 格式,则需要反序列化:

import simplejson
myDict = simplejson.loads(request.POST.get('data'))
于 2013-07-02T19:40:38.277 回答