使用python 3在django POST请求中访问嵌套对象

时间:2014-03-28 19:37:10

标签: python json django

我在从ajax post调用中访问嵌套对象时遇到了一些问题。这是我的js:

$.ajax({
    url: "/api/locate/",
    type: "POST",
    data: {start:
        {
            latitude: position.coords.latitude,
            longitude: position.coords.longitude
        }
    },
    dataType: 'json',
    contentType: "application/x-www-form-urlencoded",
    beforeSend: function(xhr, settings) {
        if (!csrfSafeMethod(settings.type) && sameOrigin(settings.url)) {
            xhr.setRequestHeader("X-CSRFToken", csrftoken);
        }
        console.log(start);
    },
    success: function(data) {
        console.log(data);
    }
}) 

在我的观点中,我可以检索数据的唯一方法是执行以下操作:

latitude = request.POST['start[latitude]']
longitude = request.POST['start[longitude]']
考虑到我最喜欢以包含纬度和经度键的字典开头,这有点不好。我确实意识到这种格式是由于内容类型设置为" application / x-www-form-urlencoded",但是当我将其更改为" application / json"时,数据必须从request.body解码:

decoded = request.body.decode('utf8')
data = json.loads(decoded)

反过来引发以下ValueError:

期望值:第1行第1列(字符0)

解码后的字符串是:

起始%5B0%5D%5Blatitude%5D = 31.736784000000004&安培;起始%5B0%5D%5Blongitude%5D = -106.473027

您是否有任何运气正确加载嵌套对象或我是否坚持使用第一种方法?

编辑:使用Django 1.6.2和python 3.4

1 个答案:

答案 0 :(得分:1)

发送json数据时,请在对象上使用JSON字符串。

data: JSON.stringify({start:
        {
            latitude: position.coords.latitude,
            longitude: position.coords.longitude
        }
    })

如果您将普通对象作为数据传递it is converted to a query string,则无论您将其声明为Content-Type。