1

我有一个 django 解析函数:

def parse_org(request):
    try:
       org = simplejson.loads(request.POST['org'])
    except Exception:
       traceback.print_exc()
    print org

我得到了解码错误。

在客户端,脚本版本(代码粘贴在后面部分)工作正常,但最近我想写一个python版本来做负载测试,所以我在python客户端脚本中编写了以下代码来发送请求:

data_dict = {}
org = ["UCSD", "MIT"]
data_dict["org"] = org
req = urllib2.Request(request_url, urllib.urlencode(data_dict), headers)
response = urllib2.urlopen(req, timeout = 5)

然后 django 站点上的解析代码出现解析错误。我比较了正确的javascript版本和错误的python客户端,唯一的区别是单引号和双引号,django端的错误解析输入是:

POST:<QueryDict: {u'org': [u"['UCSD', 'MIT']"], ....

正确的输入是:

POST:<QueryDict: {u'org': [u'["UCSD","MIT"]'], ....

供您参考,javascript 端看起来像(django 可以正确地将 org 解析为数组):

var org = [];
org.push("UCSD")
org.push("MIT")
var data = {"org":  JSON.stringify(org), ...
           }
$.post(url, data, function(data){
    callback(data);
});

我搜索了很多,但仍然找不到为什么python客户端不能工作,而javascript客户端可以工作。它与urllib的urlencode有关吗?为什么那里有单引号和双引号的区别?

非常感谢!

4

0 回答 0