2015-11-30 2 views
0

Сервер всегда выбрасывает 403 в моем приложении Django. Я попытался использовать csrf вместе с данными, которые отправляются на сервер, но все равно не повезло. Что мне не хватает?Сервер всегда выбрасывает 403 на вызов Angularjs ajax в Django

Вот как я вызова функции $http службы информацию

<body ng-controller="rdCtrl"> 
     <a ng-click="saveprof()">Save</a> 

    <script> 
    var app = angular.module('rdExampleApp', ['ui.rdplot']); 
    app.controller('rdCtrl', function ($scope, $http) { 
     $scope.dataset = { 
    "d0": { "id": 0, "name": "Housing", "value": 18 }, 
    "d1": { "id": 1, "name": "Travel", "value": 31.08 }, 
    "d2": { "id": 2, "name": "Restaurant", "value": 64 }, 
    "d3": { "id": 3, "name": "Bank", "value": 3 }, 
    "d4": { "id": 4, "name": "Movies", "value": 10 } 
     }; 

     $scope.func = function func() { 
      var jdata = $scope.dataset; 
      return jdata; 
     } 

     $scope.saveprof = function() { 
      //show spinner   
      $('.spinner').show(); 
      $http.post('saveprof', { 
       data: { 'data': $scope.dataset}, 
       'csrfmiddlewaretoken': $("input[name=csrfmiddlewaretoken]").val() 
      }) 
         .success(function (data) { 
          if (data == "null") { 
           //your code if return data empty 
          } else { 
           //your code if return data not empty 
           $('#message').html(data); 
          } 
          //hide spinner 
          $('.spinner').fadeOut(); 
         }) 
         .error(function (data, status, headers, config) { 
          console.log('error' + status); 
          //hide spinner in case of error 
          $('.spinner').fadeOut(); 
         }) 
    }); 
</script> 
</body> 

Edit:

Я исправил его, Ajax вызов был вызван при нажатии на кнопку - но он возвращает 403 ошибку .. Доступ запрещен .. У меня есть просмотр saveprof в моем представлении django .. а также я использовал токен csrf .. Не уверен, почему сервер возвращает 403. (0:

+3

Try инъекционного '$ http' в контроллер. – lux

+0

Первым параметром $ http.post должен быть URL-адрес – JB06

+0

. 'Saveprof' - это псевдоним url. Он перемещается в некоторый вид в структуре Django. –

ответ

1

вы должны вводить $ HTTP в контроллер в качестве параметра

app.controller('rdCtrl', function ($scope, $http) { .. } 
+0

Привет, Golois, Большое спасибо за это. Я исправил его, однако сервер всегда возвращает ошибку 403. Однако URL-адрес работает, когда я напрямую использую (http:/xxxx/saveprof) ... Я подозреваю, что это связано с картой Django, сервер выдает ошибку, если csrf не используется .. Я пробовал использовать его вместе с данными, но все же он бросает 403 .. Можете ли вы помочь? –

+0

Попробуйте сделать запрос с помощью инструмента, такого как скрипач, или если у вас есть хром, попробуйте добавить это приложение https://chrome.google.com/webstore/detail/advanced-rest-client/hgmloofddffdnphfgcellkdfbfbjeloo?hl=ru Это поможет вам проверить ваш API и убедиться, что он работает правильно –