Отладка Ajax в Django
Пытаюсь выполнить код на сервере через django, но не знаю как отловить ошибку, так как не могу понять, выполняется ли код на сервере и передаются ли туда хоть какие то данные:
views.py
def create_strike_view(request):
message = "jjjj"
return HttpResponse(message)
account_deatails.html
{% extends 'base.html' %}
{% block content %}
<div class="col-xs-6 ">
<div class="card ">
{% if account.image %}
<img src="{{account.image.url}}" height=500 width=500>
{% else %}
<img src="no">
{% endif %}
<form method='post' id='test'>
<input type="hidden" value="video34"/>
<input type='submit' value='Test button'/>
<div id='message'>Initial text</div>
</form>
</div>
</div>
<script>
$(document).ready(function () {
$("#test").submit(function (event) {
event.preventDefault();
$.ajax({
type: "POST",
url: "/ajax/",
data: {
'video': $('#test').val() // from form
},
success: function () {
alert ("hhh");
}
});
return false;
});
});
</script>
{% endblock content %}
urls.py
<код выше>
path('ajax/',create_strike_view,name = "post_strike"),
<код ниже>
Как понять выполняется ли код? Как в последствии его отлаживать?
Ответы (1 шт):
Постараюсь ответить, т.к. сейчас очень часто сталкиваюсь с этим.
1е. как написано в комментарии, необходимо открыть панель разработчика F12 и во вкладке Network найти ваш post-запрос он идет с типом xhr, далее во вкладке Headers внизу вы увидите отправленные данные, в вашем случае ключ 'video'. Там же в Network есть вкладка Responce в которой в случае успеха вы должны увидеть предполагаемое "jjjj". Убедитесь в правильности написания запроса, начните с передачи текстовых данных. загрузка файлов, таких как видео происходит иначе.
2е. Добавьте в ajax обработку ошибки error: это добавит вам информативности. Н-р:
success : ... ,
error: function (xhr, status, error) {
console.log(xhr.responceText);
#или
console.log(status, error);
}
3е. Не знаю как у вас (возможно данная ошибка была проигнорирована, странно, что вы с ней не столкнулись), но в джанго есть обязательное условие для форм - это защита от подмены вводимых данных, для этого в данном фреймворке используется csrf token. возможно он стоит вашем основном файле html, т.к. ваш пример html кода взят из расширения шаблона ({% extends...). вот мой пример его использования для ajax-запросов: views.py
from django.views.decorators.csrf import csrf_protect
@csrf_protect #я использую декоратор на той вьюхе которая требует защиты
def create_strike_view(request):
message = "jjjj"
return HttpResponse(message)
account_deatails.html
<script>
$(document).ready(function () {
$("#test").submit(function (event) {
event.preventDefault();
var token = '{{csrf_token}}'; #передаем токен из вью
$.ajax({
headers: {"X-CSRFToken": token}, #добавляем его в наш запрос
type: "POST",
url: "/ajax/",
data: {
'video': $('#test').val() // from form
},
success: function () {
alert ("hhh");
}
});
return false;
});
});