У меня есть контактная форма и 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 сообщает мне, что данные были отправлены правильно, но их нет. Кто-то знает ответ, что не так?
** return return_json (request) ** зачем вам эта строка во второй строке вашего представления? – martincpt
Ой, извините, я забыл упомянуть об этом. Это просто ярлык. Я отредактировал свой вопрос, добавил, что код этого. Вторая строка для тестирования, я пытался получить данные POST, и их, к сожалению, нет. –
Да, я думал. Что я на самом деле имел в виду, почему вы возвращаетесь со всем объектом запроса, прежде чем позволить запустить свою логику? – martincpt