我遵循了本教程的说明
检查“用户已经存在”,但是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']