2013-03-04 180 views
2

某处在我的Django应用程序,我做一个Ajax调用我的看法转换的Javascript字典Python字典

$.post("/metrics", { 
    'program': 'AWebsite', 
    'marketplace': 'Japan', 
    'metrics': {'pageLoadTime': '1024'} 
}); 

在我的Python代码,我有

@require_POST 
def metrics(request): 
    program = request.POST.get('program', '') 
    marketplace = request.POST.get('marketplace', '') 
    metrics = request.POST.get('metrics', '') 
    reportMetrics(metrics, program, marketplace) 

metrics()在python功能应该用这些参数调用reportMetrics(),然后这些参数应该放在日志文件中。但在我的日志文件中,我没有看到'pageLoadTime'值 - 可能是因为它是作为字典传入的。将来我需要添加更多的项目,所以它需要保持一个字典(而不是像前两个字符串)。

什么是最简单的方法来将此传入的JavaScript字典转换为Python字典?

回答

3

发送javascript字典为json并导入python json模块将其拉出。你将使用json.loads(jsonString)。

编辑 - 添加例如

$.post("/metrics", { 
    data: JSON.stringify({ 
     'program': 'AWebsite', 
     'marketplace': 'Japan', 
     'metrics': {'pageLoadTime': '1024'} 
    }) 
}); 

然后在蟒蛇侧

import json 
def metrics(request): 
    data = json.loads(request.POST.get('data')) 
    program = data.get('program','') 
    marketplace = data.get('marketplace','') 
    metrics = data.get('metrics','') 

我真的没有现在正在测试这一权利的一个很好的方式,但我相信它应该工作。如果一个字段为空,您可能还需要进行一些检查,但我相信.get()会为您处理。

+0

你的意思是代替'metrics':{'pageLoadTime':'1024'},做'metrics':'{pageLoadTime:1024}'然后json.loads()? – kk1957 2013-03-04 19:40:24

+0

它已经有一段时间了,但相信你可以做 '$ .post(“/ metrics”,{data:JSON.stringify({'program':'Awebsite',...})})' 并访问所有东西通过python中的数据。 – Hoopdady 2013-03-04 19:50:43

+0

对不起,我想我没有得到它。 你能展示如何用python提取代码示例吗? – kk1957 2013-03-04 20:14:09