【发布时间】:2015-02-02 03:58:33
【问题描述】:
我正在使用 Angular $http 将数据发布到 django,但 django 没有收到它。我一定是在滥用 $http(因为这适用于 ajax)或者我的 django 视图是错误的。
<div ng-controller="mycontroller2">
<form ng-submit="submit()">
{% csrf_token %}
Search by name:<input ng-model="artiste" />
<input type="submit" value="submit" />
</form>
<table>
<tr ng-repeat="artist in artists">
<td> {({ artist.fields.link })} </td>
</tr>
</table>
</div>
<script>
artApp.controller('mycontroller2', ['$scope', '$http',
function($scope, $http){
$scope.submit = function(){
var postdata = {
method: 'POST',
url: '/rest/',
data: {
"artiste": $scope.artiste
},
headers: {
'X-CSRFTOKEN': "{{ csrf_token }}"
}
};
$http(postdata)
.success(function(data){
$scope.artists = data;
})
}
}]);
</script>
views.py 中的请求处理程序看起来像
def rest(request):
artistname = request.POST.get("artiste") # should get 'da vinci'
response_data = {}
response_data = serializers.serialize("json", Art.objects.filter(artist__contains=artistname))
return HttpResponse(json.dumps(response_data), content_type="application/json")
我从 Django 得到的错误是ValueError at /rest/ Cannot use None as a query value。
我获取“artiste”值的调用不能从$httpdata 对象返回“da vinci”。我确定它已成功发送,因为数据 artiste: da vinci 显示在我的 devtools 标题中。 Django 只是没有得到那个价值。 request.POST.get("artiste") 调用有问题?
【问题讨论】:
-
您是否检查过(控制台上的“网络”选项卡)数据(艺术家)是否真的发送到服务器?
-
是的,我相信。在 Network 选项卡中,它显示 500 错误,我单击它并转到“Headers”,在“Request Payload”下显示
artiste: "da vinci"。你说的是这个吗? -
是的..所以这确实是一个 django 问题。您需要使用pdb 或runserver_plus 来检查请求对象
-
我解决了。由于数据是原始 json 数据,我必须通过
json.loads(request.body)而不是request.POST.get()来获取它。向#django IRC 房间大喊。
标签: javascript python django angularjs