我正在创建两个 POST 调用。一种使用 django 形式,另一种通过资源 xhr 使用 angular js。
角度设置如下所示:
myModule.factory('gridData', function($resource) {
//define resource class
var root = {{ root.pk }};
var csrf = '{{ csrf_token }}';
return $resource('{% url getJSON4SlickGrid root.pk %}:wpID/', {wpID:'@id'},{
get: {method:'GET', params:{}, isArray:true},
update:{method:'POST', headers: {'X-CSRFToken' : csrf }}
});
});
通过这样创建 xhr 发布请求:
item.$update();
此发布请求按预期发送到服务器,但是当我想访问QueryDict时,我无法访问使用传递的数据:
name = request.POST.get('name', None)
name
总是None
这样。
这背后的问题是 QueryDict 对象被解析得很奇怪。
print request.POST
<QueryDict: {u'{"name":"name update","schedule":0"}':[u'']}>
而我本来期望这个结果,当我通过“正常”发布请求发送数据时得到这个结果:
<QueryDict: {u'name': [u'name update'], u'schedule': [u'0']}>
所以似乎 Django 在 POST 请求中接收到一些东西,指示 Django 将参数解析为一个字符串。知道如何规避这个问题吗?
更新:
我发现这个讨论他们说问题是如果您提供除 MULTIPART_CONTENT 以外的任何内容类型,则参数将被解析为一个字符串。我检查了使用 POST 请求发送的内容类型,它确实设置为'CONTENT_TYPE': 'application/json;charset=UTF-8'
. 因此,这很可能是问题所在。因此我的问题是:如何将使用 angular.js 资源创建的 xhr 发布请求的 CONTENT_TYPE 设置为MULTIPART_CONTENT
?