【问题标题】:How can I post params to be used as an object in Django如何发布参数以用作 Django 中的对象
【发布时间】:2017-10-23 14:35:45
【问题描述】:

我想向我的服务器发送一个 ajax Post 请求,其中包含要像对象一样使用的参数:

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

当我这样发送参数时:

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

它会产生以下错误:

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

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

问候,

【问题讨论】:

    标签: python django frontend


    【解决方案1】:

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

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

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

    还有 json.loads(request.data.get('student_info', {})) 在 Django 部分:)

    【讨论】:

      【解决方案2】:

      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,这可能会引发错误

      以前的答案是我的错误。代表我对此表示歉意。

      【讨论】:

      • 请让我知道如果我说或发布了任何错误...匿名反对票只是懦弱。
      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

        Content-Type: application/json
        

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

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

        然后你会直接得到一个对象。

        就这么简单:)

        【讨论】:

          猜你喜欢
          • 2021-12-26
          • 2014-01-28
          • 2020-04-25
          • 1970-01-01
          • 2020-03-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-09-16
          相关资源
          最近更新 更多