【问题标题】:Accessing nested objects in django POST request using python 3使用python 3访问django POST请求中的嵌套对象
【发布时间】:2014-03-28 19:37:09
【问题描述】:

我在从 ajax 发布调用访问嵌套对象时遇到了一些问题。这是我的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)

解码后的字符串是:

start%5B0%5D%5Blatitude%5D=31.736784000000004&start%5B0%5D%5Blongitude%5D=-106.473027

你们中的任何人在正确加载嵌套对象方面有什么运气吗?还是我坚持第一种方法?

编辑:使用 Django 1.6.2 和 python 3.4

【问题讨论】:

    标签: python json django


    【解决方案1】:

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

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

    如果您将纯 Object 作为数据传递,it is converted to a query string,无论您声明为 Content-Type 什么。

    【讨论】:

      猜你喜欢
      • 2020-06-19
      • 2021-11-16
      • 1970-01-01
      • 2018-12-20
      • 1970-01-01
      • 1970-01-01
      • 2023-01-08
      • 1970-01-01
      • 2019-10-27
      相关资源
      最近更新 更多