将数据从 angularjs 发送到 django

Posted

技术标签:

【中文标题】将数据从 angularjs 发送到 django【英文标题】:sending data from angularjs to 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。

【问题讨论】:

【参考方案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

以上是关于将数据从 angularjs 发送到 django的主要内容,如果未能解决你的问题,请参考以下文章

如何从 WebView Cordova AngularJS 控制器访问/发送数据到 MainActivity?

angularJS 从 base64 制作二进制数据图像并作为图像文件发送到服务器

使用 django 和 AngularJS 使用 JWT 登录所需的装饰器

将数据从 Python Web 套接字客户端发送到 Django 通道

Django + Angular:如何将 angularjs $http 数据或参数发送到 django 并在 django 中解释?

将表格数据从模板发送到 django 中的 view.py