【问题标题】:sending data from angularjs to django将数据从 angularjs 发送到 django
【发布时间】:2012-05-18 05:01:35
【问题描述】:

我正在使用 Angularjs 及其 $http 模块向 Django 服务器发送 POST AJAX 请求。这是一个例子:

$http({ 
        method: 'POST', 
        url: '/url/', 
        data: 'test data'
  }).
  success(function(data, status, headers, config) {
        doSomeStuffWhenSuccess();
  });

问题是我在 Django 中得到了什么。无论我发送什么,数据始终是QueryDict 对象的键,其值始终是一个空列表。

<QueryDict: {u'test data': [u'']}>

我不知道为什么。我错过了什么?

我使用几乎默认创建的 Django 应用程序和默认中间件。我只创建了一个视图并在 url config 中设置了一个 url。 Django 的版本是 1.3。我将 Angular 的 $http 模块配置为始终发送包含 csrf 令牌的标头以满足 Django。

【问题讨论】:

    标签: ajax django http angularjs


    【解决方案1】:

    我用 jQuery 参数函数解决了这个问题。我认为这是更优雅的解决方案。

    $http({ 
        method: 'POST', 
        url: '/url/', 
        data: $.param({test: data})
    })
    

    现在它可以像我想要的那样工作了。

    【讨论】:

      【解决方案2】:

      我相信 django 认为您正在发送一个 urlencoded 表单,例如。键=值&键2=值2...

      如果你愿意尝试:

      $http({ 
          method: 'POST', 
          url: '/url/', 
          data: 'test=data'
      })
      

      你应该得到

      <QueryDict: {u'test': [u'data']}>
      

      您始终可以通过以下方式获取数据(原始正文内容):

      request.body
      

      希望这是您正在寻找的。​​p>

      【讨论】:

      • 感谢这项工作!但是你能解释一下为什么 django 认为它的 urlencoded 数据吗?如果可以定制它?
      • request.GET 和 request.POST 包含预处理的键/值数据 - 如果您想要原始数据(例如 JSON 或纯文本),请尝试:request.raw_post_data
      猜你喜欢
      • 2018-01-24
      • 2016-08-11
      • 2018-01-11
      • 1970-01-01
      • 2016-07-31
      • 1970-01-01
      • 1970-01-01
      • 2017-09-22
      • 1970-01-01
      相关资源
      最近更新 更多