2014-12-05 2 views
0

У меня есть контактная форма и JS/Угловой код, отправляющий его для просмотра для проверки и рассылки.Django AJAX форма, нет данных POST в поле зрения

contact_form.js

(function() { 
var app = angular.module('contactForm', []); 

app.config(function ($httpProvider) { 
    $httpProvider.defaults.xsrfCookieName = 'csrftoken'; 
    $httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken'; 
    $httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; 
}); 

app.controller('contactFormController', ['$http', '$scope', function($http, $scope){ 
    $scope.contact_form = {}; 
    this.send = function(form){ 
     if (form.$valid){ 
      $http.post('/contact_form_submit/', {'form': $scope.contact_form}). 
      success(function(data, status, headers, config) { 
       if (data.status == 1) { 
        $scope.msg = 'Twoja wiadomość została wysłana.'; 
        $scope.contact_form = {}; 
        $scope.contactForm.$setPristine(); 
       } 
       else if (data.status == 'delay') 
        $scope.msg = 'Odczekaj.'; 
      }). 
      error(function(data, status, headers, config) { 
       $scope.msg = 'Wystąpił błąd.'; 
       if (status == '403') 
        $scope.msg += ' Włącz cookie!'; 
      }); 
     } 
     else 
      this.msg = 'invalid!'; 
    }; 
}]); 
})(); 

view.py

def contact_form_submit(request): 
return return_json(request) 
if not request.is_ajax() or (request.method != 'POST'): 
    raise SuspiciousOperation 

response_data = {} 

# dealing with existing (or not) delay entry 
try: 
    if request.session['mailer_delay'] > str(timezone.now()): 
     response_data['status'] = 'delay' 
     return return_json(response_data) 
except KeyError: 
    pass 

# validation 
form_data = {} 
for field in ['name', 'email', 'phone', 'subject', 'text']: 
    form_data[field] = request.POST.items() 

# mailing 
mailer = send_mail('Subject here', 'Here is the message.', '[email protected]', 
['[email protected]'], fail_silently=False) 
request.session['mailer_delay'] = str(timezone.now()+timedelta(seconds=60)) 

response_data['status'] = mailer 
return return_json(response_data) 

и return_json()

def return_json(data): 
    from django.http import HttpResponse 
    import json 
    return HttpResponse(json.dumps(data), content_type="application/json") 

Проблема в том, что я не получаю никаких элементов в запросе. POST. Firebugs сообщает мне, что данные были отправлены правильно, но их нет. Кто-то знает ответ, что не так?

+0

** return return_json (request) ** зачем вам эта строка во второй строке вашего представления? – martincpt

+0

Ой, извините, я забыл упомянуть об этом. Это просто ярлык. Я отредактировал свой вопрос, добавил, что код этого. Вторая строка для тестирования, я пытался получить данные POST, и их, к сожалению, нет. –

+0

Да, я думал. Что я на самом деле имел в виду, почему вы возвращаетесь со всем объектом запроса, прежде чем позволить запустить свою логику? – martincpt

ответ

1

Хорошо, я понял. Все данные были в request.body, а не request.POST. Может ли кто-нибудь объяснить, почему? Я читал документы, но все же это не ясно для меня.

+2

Поскольку вы отправляете JSON, а не данные в форме. –

Смежные вопросы