如何在Django中发布params用作对象

时间:2017-05-23 14:52:08

标签: python django frontend

我想向我的服务器发送一个ajax Post请求,其中一个param可以像对象一样使用:

student_name = request.data.get('student_info', {}).get('name')

当我发送这样的参数时:

student_info:{“name”:“Tom”,“age”:20}

它产生以下错误:

AttributeError: 'unicode' object has no attribute 'get'

最好的答案是我不需要改变我的后端, 并通过正确发送数据来解决我的问题。

此致

4 个答案:

答案 0 :(得分:0)

request.data只是从前端发布的字符串。

你可以这么做,

student_name = request.data.get('student_info', {})['name']

你也可以这样做,

import json
student_name = json.loads(request.data.get('student_info')).get('name')

但是,如果request.data中没有student_info,这可能会引发错误。

以前的回答是我身边的错误。我代表他道歉。

答案 1 :(得分:0)

您需要发送Json内容而不是密钥字符串值:

data: JSON.stringify({"student_info":"{'name':'Tom', 'age': 20}'})

您的错误request.data.get('student_info', {})返回一个字符串,因此您无法使用name

检索get('name')

Django中的json.loads(request.data.get('student_info', {}))部分:)

答案 2 :(得分:0)

我希望您在前端对数据进行字符串化。我曾经通过从ajax发送数据解决了这个问题,如下所示:

var js = {"name":"nguyen","age":"1"};
$.post("/", {'data': JSON.stringify(js)}, function(ret){
        console.log(ret)
    });

答案 3 :(得分:0)

您应该从客户端发送JSON对象。设置

Content-Type: application/json

在您的请求标头中,并在请求正文中编写您的对象,如下所示:

{"student_info":{"name":"Tom", "age": 20}}

然后你会直接得到一个物体。

就这么简单:)