2013-03-04 109 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