Django CSRF检查失败,并出现Ajax GET请求

时间:2020-04-24 14:40:20

标签: javascript jquery django ajax

我遵循了本教程的说明

https://simpleisbetterthancomplex.com/tutorial/2016/08/29/how-to-work-with-ajax-request-with-django.html

检查“用户已经存在”,但是Django仍然拒绝我的POST请求。我可以通过我的AJAX帖子向遵循Django CSRF保护机制的人员提供帮助。我已按照此处的指示进行操作:

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 %}

获取http://127.0.0.1:8000/ajax/validate_username?csrfmiddlewaretoken=kc6NtBw1pch0jjI0SGHhCVBeAKYWZrppOFgxHUaisCVqJUUlY73orIM3PDI0kejA&username=Tony&email=&password1=&password2= 500(内部服务器错误) 发送@ 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

/ ajax / validate_username处的

FieldError 无法将关键字“ username_iexact”解析为字段。选项包括:date_joined,电子邮件,first_name,组,id,is_active,is_staff,is_superuser,last_login,last_name,logentry,订单,密码,user_permissions,用户名 请求方法:GET 请求网址:http://127.0.0.1:8000/ajax/validate_username?csrfmiddlewaretoken=kc6NtBw1pch0jjI0SGHhCVBeAKYWZrppOFgxHUaisCVqJUUlY73orIM3PDI0kejA&username=Tony&email=&password1=&password2=

Django版本:3.0.5 异常类型:FieldError 异常值:
无法将关键字“ username_iexact”解析为字段。选项包括:date_joined,电子邮件,first_name,组,id,is_active,is_staff,is_superuser,last_login,last_name,logentry,订单,密码,user_permissions,用户名 例外位置:names_to_path的第1483行中的C:\ Users \ Le Dai Thang \ Envs \ myproject \ lib \ site-packages \ django \ db \ models \ sql \ query.py 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']

0 个答案:

没有答案
相关问题