Python “如何修复”;禁止(403)CSRF验证失败。请求已中止。”;django中的错误
我在标题中发现了这个常见的错误。我正在Django的虚拟环境文件夹中做一个项目 setting.py:Python “如何修复”;禁止(403)CSRF验证失败。请求已中止。”;django中的错误,python,django,csrf,django-csrf,csrf-token,Python,Django,Csrf,Django Csrf,Csrf Token,我在标题中发现了这个常见的错误。我正在Django的虚拟环境文件夹中做一个项目 setting.py: 中间件=[ 'django.middleware.security.SecurityMiddleware', “django.contrib.sessions.middleware.SessionMiddleware”, 'django.middleware.common.CommonMiddleware', “django.middleware.csrf.CsrfViewMiddleware
中间件=[
'django.middleware.security.SecurityMiddleware',
“django.contrib.sessions.middleware.SessionMiddleware”,
'django.middleware.common.CommonMiddleware',
“django.middleware.csrf.CsrfViewMiddleware”,
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.xFrameOptions中间件',
]
index.html:
{%load static%}
Instapic
{%csrf_令牌%}
登录表单
创建帐户
$(文档).ready(函数(){
$('#go')。单击(函数(){
$.post(“ajax注册”,
{
用户名:$(“#用户名”).val(),
电子邮件:$(“#电子邮件”).val(),
密码:$(“#密码”).val()
},
功能(数据、状态){
if(JSON.parse(data).Status=='Success'){
window.location='/';
}否则{
$('#errors').html(“+JSON.parse(data.Message+”)
$('#errors').css('显示','块')
}
});
返回false;
})
})
我在我的html文件中添加了{%csrf\u token%}
,试图解决这个问题-没有效果。我在网上找到了以下标签示例:
不幸的是,我不知道如何使用它来修复我的错误。
谢谢你的帮助我想,你不是在发布表单,而是在发布价值观。 在执行$.post()语句时,需要添加csrfmiddlewaretoken键 这是未测试的,但可能会解决您的问题
csrfmiddlewaretoken: document.getElementsByName('csrfmiddlewaretoken')[0].value
或
通过更新在HTML文件中添加此行
$.post("ajax-sign-up",
{
username: $("#username").val(),
email: $("#email").val(),
password: $("#password"),
csrfmiddlewaretoken: $('[name=csrfmiddlewaretoken]').val()
},
更新代码为:
{% load static %}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Instapic</title>
<link rel="stylesheet" href="{% static 'assets/bootstrap/css/bootstrap.min.css' %}">
<link rel="stylesheet" href="{% static 'assets/css/Login-Form-Clean.css' %}">
<link rel="stylesheet" href="{% static 'assets/css/styles.css' %}">
</head>
<body>
<div class="login-clean">
<form method="post">
{% csrf_token %}
<h2 class="sr-only">Login Form</h2>
<div class="illustration">
<div style="display: none" id="errors" class="well form-error-message"></div>
<img src="{% static 'assets/img/logo.jpg' %}">
</div>
<div class="form-group">
<input class="form-control" id="username" type="text" name="username" required="" placeholder="Username" maxlength="20" minlength="4">
</div>
<div class="form-group">
<input class="form-control" id="email" type="email" name="email" required="" placeholder="Email" maxlength="100" minlength="6">
</div>
<div class="form-group">
<input class="form-control" id="password" type="password" name="password" required="" placeholder="Password" maxlength="20" minlength="6">
</div>
<div class="form-group">
<button class="btn btn-primary btn-block" id="go" type="submit">Create Account</button>
</div><a href="#" class="forgot">Already got an account? Login here ...</a></form>
</div>
<script src="{% static 'assets/js/jquery.min.js' %}"></script>
<script src="{% static 'assets/bootstrap/js/bootstrap.min.js' %}"></script>
<script src={% static "assets/js/django-ajax.js" %}></script>
<script type="text/javascript">
$(document).ready(function() {
$('#go').click(function() {
$.post("ajax-sign-up",
{
username: $("#username").val(),
email: $("#email").val(),
password: $("#password").val(),
csrfmiddlewaretoken: $('[name=csrfmiddlewaretoken]').val()
},
function(data, status){
if (JSON.parse(data).Status == 'Success') {
window.location = '/';
} else {
$('#errors').html("<span>" + JSON.parse(data).Message + "</span>")
$('#errors').css('display', 'block')
}
});
return false;
})
})
</script>
</body>
</html>
{%load static%}
Instapic
{%csrf_令牌%}
登录表单
创建帐户
$(文档).ready(函数(){
$('#go')。单击(函数(){
$.post(“ajax注册”,
{
用户名:$(“#用户名”).val(),
电子邮件:$(“#电子邮件”).val(),
密码:$(“#密码”).val(),
csrfmiddlewaretoken:$('[name=csrfmiddlewaretoken]')。val()
},
功能(数据、状态){
if(JSON.parse(data).Status=='Success'){
window.location='/';
}否则{
$('#errors').html(“+JSON.parse(data.Message+”)
$('#errors').css('显示','块')
}
});
返回false;
})
})
如果您只是发布id为注册表单的HTML表单的内容(将其添加到
),并且您的表单具有{%csrf\u token%}
,那么您可以在ajax中使用:
$.post("ajax-sign-up", $("#signup-form").serialize(), function(data, status){...})
什么时候会发生这种情况?单击#go按钮时?您读过吗?如果您不在ajax post请求中单独传递字段,而只获取表单数据(其中包括csrftoken),可能会更容易。或者你按照我在之前评论中给出的链接中的说明进行操作。我没有得到它。我应该在哪里添加此内容?settings.py?HTML文件中没有。我更新了代码,您可以检查一下。试试@dirkgroten solution,这是本例中更好的解决方案。看看您自己的HTML模板,您已经编写了$.post(“ajax注册”)…
您自己!我只是建议提交所有表单字段,而不是您明确编写的3个表单字段。请参阅下面@somil的答案,这里为您详细说明了它。但是,请慢慢阅读链接,直到你完全理解它。
$.post("ajax-sign-up", $("#signup-form").serialize(), function(data, status){...})