Найти - Пользователи
Полная версия: Проблема с передачей данных из формы Django POST-запросом с использованием Ajax
Начало » Django » Проблема с передачей данных из формы Django POST-запросом с использованием Ajax
1
AIP
Солкнулся с такой проблемой. Есть простенькая Django форма, есть скрипт jQuery/Ajax, который перехватывает submit и отправляет данные во вьюшку. Однако данные в request.POST не приходят.

forms.py
 class CommentForm(forms.ModelForm):
    class Meta:
        model = Comment
        fields = ('text_comment',)

models.py
 class Comment(models.Model):
    text_comment = models.TextField()
    
    def __str__(self):
        return self.text_comment

urls.py
 urlpatterns = [
    url(r'^$', views.comment_list, name='comment_list'),
    url(r'^edit/$', views.comment_list, name='comment_list_edit'),
]

views.py
 @csrf_exempt
def comment_list(request):
    if request.is_ajax() and request.method == "POST":
        form = CommentForm(request.POST)
        comment = Comment(text_comment=request.POST.get('text_comment', 
            "ошибка передачи из формы"))
        print('AJAX')
        print('form: ', form)
        print('request.body: ', request.body.decode('utf-8'))
        print('request.POST: ', request.POST)
        #comment.save()
        #data_ajax = {'comment': comment}
        data_ajax = {'comment': "Новый комментарий"}
        return JsonResponse(data_ajax)       
    else:
        print('NO AJAX')
        form = CommentForm()
        comments = Comment.objects.all()
        return render(request, 'blog/comment_list.html', {'comments': comments,
            'form': form})

script.js
 $(document).ready(function ($) {
	var form = $('#login');	
	form.submit(function(e) {
	    e.preventDefault();
            var data_text = $("[name='text_comment']").val();
	    var csrftoken = $("[name='csrfmiddlewaretoken']").val();
	    $.ajax({
 			type: "POST",
                        url: '/edit/',
                        dataType: 'json',
			contentType: 'application/json; charset=utf-8',	
			data: {csrfmiddlewaretoken: csrftoken,
			       comment: data_text},
			error: function (jqXHR, status, error) {
                               alert('Ошибка получения запроса');
                        },			
			success: function(result) {
				alert(result.comment); 
				$("div.text p").html(result.comment);	
                       }
            }); 		
	});
});

comment_list.html
 <!DOCTYPE html>
{% load staticfiles %}
<html>
  <head>
    <script  src="{% static  'js/jquery.js' %}"></script>
    <script  src="{% static  'js/jquery.min.js' %}"></script>
    <script  src="{% static  'js/script.js' %}"></script>
    <title>AJAX</title>
  </head>
  <body>
    <div class="text">
	   COMMENT <br>
	  {% for comment in comments %}
	  {{ comment }}
	  {% endfor %}
		
	<p>Здесь будет результат работы ajax скрипта</p>
	</div>
	
	<div class="text-form">
	  <form method="POST" class="post-form" id="login" action="." enctype="multipart/form-data">
	  {% csrf_token %}
	  {{ form.as_p }}
	  <input type="submit" value="Значение"  class="btn btn-default btn-sm" name="preview_submit"/>
	  </form>
	</div>
  </body>
</html>

Консоль выдает
 ystem check identified no issues (0 silenced).
October 19, 2016 - 09:45:31
Django version 1.9.5, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
//ОБНОВЛЯЮ СТРАНИЦУ
NO AJAX
[19/Oct/2016 09:45:35] "GET / HTTP/1.1" 200 955
[19/Oct/2016 09:45:35] "GET /static/js/script.js HTTP/1.1" 200 817
[19/Oct/2016 09:45:35] "GET /static/js/jquery.js HTTP/1.1" 304 0
[19/Oct/2016 09:45:35] "GET /static/js/jquery.min.js HTTP/1.1" 304 0
//ДЕЛАЮ SUBMIT
AJAX
form:  <tr><th><label for="id_text_comment">Text comment:</label></th><td><ul cla
ss="errorlist"><li>This field is required.</li></ul><textarea cols="40" id="id_t
ext_comment" name="text_comment" rows="10">
</textarea></td></tr>
request.body:  csrfmiddlewaretoken=XNwv9peCMLXVJIl3qzjSkCGRrnH3Cw5F&comment=77777
request.POST:  <QueryDict: {}>
[19/Oct/2016 10:09:57] "POST /edit/ HTTP/1.1" 200 112

Как видим, те данные, которые передаются через request.body, приходят нормально, а те,
которые через request.POST, теряются.
Никто не сталкивался, почему это происходит и как лечится.
FishHook
вот это уберите
                        dataType: 'json',
			contentType: 'application/json; charset=utf-8',
AIP
FishHook
вот это уберите
Спасибо, помогло.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB