Я следовал инструкциям этого урока
https://simpleisbetterthancomplex.com/tutorial/2016/08/29/how-to-work-with-ajax-request-with-django.html
, чтобы проверить «Пользователь уже существует или нет», но Django все еще отклоняет мой запрос POST. Я мог бы использовать некоторую помощь в соответствии с механизмом защиты CSRF Django через мой пост AJAX. Я следовал указаниям здесь:
http://docs.djangoproject.com/en/dev/ref/contrib/csrf/
Но это не помогло мне. Это мой результат в консоли:
{% extends 'base.html' %}
{% block title %}
Register
{% endblock %}
{% load crispy_forms_tags %}
{% block body %}
<div class="container">
<h1 class="text-center">Regiser</h1>
<form class="form-group" method="POST" data-validate-username-url = "{% url 'validate_username' %}">
{% csrf_token %}
{{ form|crispy }}
<input type="submit" name="Register" class="btn btn-primary text-center" value="Register">
</form>
</div>
{% endblock %}
{% block script %}
<script>
function getCookie(name) {
var cookieValue = null;
if (document.cookie && document.cookie !== '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = cookies[i].trim();
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) === (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
function csrfSafeMethod(method) {
// these HTTP methods do not require CSRF protection
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
$(document).ready(function() {
var csrftoken = getCookie('csrftoken');
$.ajaxSetup({
beforeSend: function(xhr, settings) {
if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
}
}
});
});
$("#id_username").change(function() {
var form = $(this).closest("form");
$.ajax({
url: form.attr('data-validate-username-url'),
data: form.serialize(),
dataType: 'json',
success: data => {
if (data.is_taken) {
alert(data.error_message);
}
}
});
});
</script>
{% endblock %}
GET http://127.0.0.1: 8000 / ajax / validate_username? Csrfmiddlewaretoken = kc6NtBw1pch0jjI0SGHhCVBeAKYWZrppOFgxHUais &242 = пароль пользователя * user0 = user02 * user02 * user002_2_j0Ej0jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjju также jquery -3.5.0.min. js: 2 ajax @ jquery -3.5.0.min. js: 2 (анонимно) @ (индекс): 79 отправка @ jquery -3.5 .0.min. js: 2 v.handle @ jquery -3.5.0.min. js: 2
FieldError at / ajax / validate_username Невозможно разрешить ключевое слово 'username_iexact' в поле. Возможные варианты: date_joined, email, first_name, groups, id, is_active, is_staff, is_superuser, last_login, last_name, logentry, заказы, пароль, user_permissions, username Метод запроса: GET URL запроса: http://127.0.0.1: 8000 / ajax / validate_username? csrfmiddlewaretoken = kc6NtBw1pch0jjI0SGHhCVBeAKYWZrppOFgxHUaisCVqJUUlY73orIM3PDI0kejA & username = Tony & email1 = & password1 = & password1 = & password1 = поле ввода пароля * * 10 * ** Возможные варианты: date_joined, email, first_name, groups, id, is_active, is_staff, is_superuser, last_login, last_name, logentry, заказы, пароль, user_permissions, username Исключение Местоположение: C: \ Users \ Le Dai Thang \ Envs \ myproject \ lib \ site-packages \ django \ db \ models \ sql \ query.py в names_to_path, строка 1483 Python Исполняемый файл: C: \ Users \ Le Dai Thang \ Envs \ myproject \ Scripts \ python .exe Python Версия: 3.7.7 Python Путь:
['C: \ Users \ Le Dai Thang \ Lecture7 \ project3', 'C: \ Users \ Le Dai Thang \ Envs \ myproject \ Scripts \ python37.zip ',' c: \ users \ le dai thang \ appdata \ local \ Programs \ python \ python37 \ DLLs ',' c: \ users \ le dai thang \ appdata \ local \ Programs \ python \ python37 \ lib ',' c: \ users \ le dai thang \ appdata \ local \ Programs \ python \ python37 ',' C: \ Users \ Le Dai Thang \ Envs \ myproject ',' C : \ Users \ Le Dai Thang \ Envs \ myproject \ lib \ site-packages ']