angularjs を使用して django-rest で構築された REST API を使用しようとしましたが、問題が発生しました。DELETE リクエストを送信すると、django-rest は OPTIONS を参照してください。
これは私がしたことです:
私の Django views.py
@api_view(['GET', 'PUT', 'DELETE'])
def node_detail(request, pk):
"""
Retrieve, update or delete a node.
"""
try:
node = Node.objects.get(pk=pk)
except Node.DoesNotExist:
return Response(status=status.HTTP_404_NOT_FOUND)
if request.method == 'GET':
serializer = NodeSerializer(node)
return Response(serializer.data)
elif request.method == 'PUT':
data = JSONParser().parse(request)
serializer = NodeSerializer(node, data=data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
elif request.method == 'DELETE':
node.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
django-cors-headers を使用して CORS を追加しました。すべてのオリジンが受け入れられます (CORS_ORIGIN_ALLOW_ALL = True)
$resource でこれを管理する角度のあるサービスがあります
angular.module('akilio.nodes.services', ['ngResource'])
.factory('NodeServices', function($resource){
return $resource('http://127.0.0.1:8000/nodes/:nodeId/', {nodeId: '@nodeId'});
});
さて、ng-click="deleteNode()" のボタンで、このコントローラーを呼び出します
controller('DetailCtrl', ['$scope', '$routeParams', 'NodeServices', function($scope, $routeParams, NodeServices) {
$scope.node = NodeServices.get({nodeId: $routeParams.pk});
$scope.deleteNode = function(){
$scope.node.$delete(function(){
console.log('ok');
}, function(){
console.log('nok');
});
};
}]);
console.log() は毎回「nok」を返し、私のdjangoコンソールでは、
[08/Nov/2013 09:39:10] "OPTIONS /nodes HTTP/1.1" 301 0
参考までに、私のAngularバージョンはv1.2.0-rc.3で、アプリに追加しました
config(['$sceDelegateProvider', function($sceDelegateProvider) {
$sceDelegateProvider.resourceUrlWhitelist(['self', 'http://127.0.0.1']);
}])
しかし、何も変わっていません:(
アイデア ?
編集
問題は $resource にあると思います。実装が間違っているのかもしれません。$resource の代わりに $http を使用してノードを削除しようとしました
$http.delete('http://127.0.0.1:8000/nodes/4/');
そしてすべてが大丈夫です。