我刚刚用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)
如果我向服务器发送GET
或POST
请求,此函数可以正常工作。但是,我想从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格式,字段未知。
答案 0 :(得分:4)
data= request.POST.get('data','')
将从字典中返回单个值(key = data
)。如果您想要整个字典,只需使用request.POST
即可。您在此处使用QueryDict类:
在HttpRequest对象中,GET和POST属性是django.http.QueryDict的实例。 QueryDict是一个类似字典的类,用于处理同一个键的多个值。这是必要的,因为一些HTML表单元素,特别是为同一个键传递多个值。
QueryDict实例是不可变的,除非您创建它们的副本()。这意味着您无法直接更改request.POST和request.GET的属性。
答案 1 :(得分:0)
如果发布的数据是JSON格式,则需要对其进行反序列化:
import simplejson
myDict = simplejson.loads(request.POST.get('data'))