Django Проверка CSRF завершилась неудачно с запросом Ajax GET - PullRequest
0 голосов
/ 24 апреля 2020

Я следовал инструкциям этого урока

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 ']

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...