Как написать view, чтобы отправлять на него данные из формы?

Здравствуйте! Делаю SPA приложение на Django + Angular. Встала задача сделать форму обратной связи, чтобы в дальнейшем отправлять данные из неё в Джанго через $http сервис Ангуляра, т.е, чтобы страница не перезагружалась при отправке.

Попробовал сначала реализовать форму без Ангуляра, с такой вьюхой:

def new_message(request):
    if request.method == 'POST':
        form = MessageForm(request.POST)
        if form.is_valid():
            form.save()

    form = MessageForm()
    return render(request, 'main/extra.html', {"form": form})


Всё работало нормально, но когда подключил Ангуляр начались проблемы: Он должен отправлять объект message в json виде, но вместо этого из-за того, что контроллер возвращает возвращает render(request, 'main/extra.html', {"form": form}) в объект message попадает страница extra.html, вместо данных из формы, если же убрать render(), то Джанго выдаст ошибку

var app = angular.module('uniApp', ['ngRoute']);

angular.
  module('uniApp').
  config(['$locationProvider', '$routeProvider',
    function config($locationProvider, $routeProvider) {
      $locationProvider.html5Mode(true);
      $routeProvider.
        when('/', {
          controller : 'mainCtrl',
          templateUrl : 'media/views/main.html'
        }).
        when('/case/:id', {
          controller : 'detailCtrl',
          templateUrl : 'media/views/detail.html'
        }).
        otherwise('/');
    }
  ]);

app.controller('mainCtrl', function ($scope, $http) {
  $http.get('/api/v0/cases/').success(function(data){
    $scope.cases = data;
  });
});
app.controller('detailCtrl', function($scope, $http, $routeParams) {
  var cid = $routeParams["id"]
  $http.get('/api/v0/cases/' + cid + '/').success(function(data){
    $scope.case = data;
  });
});
app.controller('formCtrl', function($scope, $http) {
  $scope.save = function(message, messageForm) {
    console.log($scope.message)
    if (messageForm.$valid){
      $http.post('/message/', message).success(function(message){
        console.log(message)
      });
    }
    else {
      console.log('error')
    }
  };
});


Ясно, что обычный вью не подходит для этой задачи, вопрос в том, как реализовать такой функционал?
  • Вопрос задан
  • 503 просмотра
Пригласить эксперта
Ответы на вопрос 1
sim3x
@sim3x
request.is_ajax

return JsonResponse

а вообще джангу спаривают с ангуляром через https://github.com/tomchristie/django-rest-framework
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы