解析作为POST参数传递的字典列表

时间:2010-06-16 20:20:04

标签: python django post dictionary iteration

我有一个python词典列表,如下所示:

sandwiches = [
    {'bread':'wheat', 'topping':'tomatoes', 'meat':'bacon'},
    {'bread':'white', 'topping':'peanut butter', 'meat':'bacon'},
    {'bread':'sourdough', 'topping':'cheese', 'meat':'bacon'}
]

我想将此作为POST参数传递给另一个Django应用程序。客户端应用程序需要做什么才能遍历列表?

我想做类似的事情:

for sandwich in request.POST['sandwiches']:
    print "%s on %s with %s is yummy!" % (sandwich['meat'], sandwich['bread'], sandwich['topping'])

但是当我的数据到达我的客户端应用程序时,我似乎没有一个dicts列表。

3 个答案:

答案 0 :(得分:4)

您没有说明你是如何发布应用程序的。我的建议是将字典序列化为JSON,然后简单地发布。

import json, urllib, urllib2
data = json.dumps(sandwiches)
urllib2.urlopen(myurl, urllib.urlencode({'data': data}))

......和接收者:

data = request.POST['data']
sandwiches = json.loads(data)

答案 1 :(得分:2)

我会使用JSON库将您的dicts数组序列化为单个字符串。将此字符串作为POST参数发送,并使用相同的库将字符串解析回Django应用程序中的python数据类型。

http://docs.python.org/library/json.html

答案 2 :(得分:0)

首先制作列表的字符串

import ast, requests

# request send code
dev_list = [{"1": 2}, {"2": 4}]

str_list = str(dev_list) # '[{"1": 2}, {"2": 4}]'

data = {"a" : "mynema",
        'str_list': str_list
       }

requests.post(url, data )

#request receive side
data = request.data

dev_list = data.get('str_list')

dev_list = ast.literal_eval(dev_list)

#dev_list --> [{"1": 2}, {"2": 4}]

现在您收到字典列表。