Tho*_*mel 3 django post xmlhttprequest angularjs
我正在创建两个POST调用.一个使用django形式,一个使用角度js通过资源xhr.
角度设置如下所示:
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 }}
});
});
Run Code Online (Sandbox Code Playgroud)
通过创建xhr post请求:
item.$update();
Run Code Online (Sandbox Code Playgroud)
此post请求按预期发送到服务器,但是当我想访问QueryDict时,我无法访问传递的数据:
name = request.POST.get('name', None)
Run Code Online (Sandbox Code Playgroud)
name总是None这样.
这背后的问题是QueryDict对象被解析得很奇怪.
print request.POST
<QueryDict: {u'{"name":"name update","schedule":0"}':[u'']}>
Run Code Online (Sandbox Code Playgroud)
虽然我会期望这个结果,当我通过"正常"的Post请求发送数据时,我得到了这个结果:
<QueryDict: {u'name': [u'name update'], u'schedule': [u'0']}>
Run Code Online (Sandbox Code Playgroud)
所以似乎Django在POST请求中收到一些东西,指示Django将参数解析为一个字符串.知道如何规避这个吗?
更新:
我发现这个讨论,他们说问题是如果你提供除MULTIPART_CONTENT以外的任何内容类型,参数将被解析为一个字符串.我检查了内容类型发送与POST请求,它确实设置为'CONTENT_TYPE': 'application/json;charset=UTF-8'.因此,这可能是问题所在.因此我的问题是:如何为使用angular.js资源创建的xhr post请求设置CONTENT_TYPE MULTIPART_CONTENT?
你可以:
json.loads(request.raw_post_data).get('name', None)(django <1.4)json.loads(request.body).get('name', None)(django> = 1.4)Angular文档讨论了转换请求和响应
要在本地覆盖这些转换,请将转换函数指定为配置对象的transformRequest和/或transformResponse属性.要全局覆盖默认转换,请覆盖$ httpProvider的$ httpProvider.defaults.transformRequest和$ httpProvider.defaults.transformResponse属性.
你可以在这里找到一个例子,如前所述.
| 归档时间: |
|
| 查看次数: |
2365 次 |
| 最近记录: |