我想使用 JQuery 通过 AJAX Post 请求发布登录表单:
即使我将 csrf 令牌与其他令牌一起发送,但不知何故 Django 无法使用 cookie 内的令牌进行验证。
$(function(){
$(document).on('submit', 'form', function(event){
event.preventDefault();
$.ajax({
type: 'POST',
url: 'login',
data: JSON.stringify({
username: $('input[name=username]').val(),
password: $('input[name=password]').val(),
csrfmiddlewaretoken: $('input[name=csrfmiddlewaretoken]').val()
}),
success: function(response){
console.log(response);
}
});
});
这里是url去的视图函数:
def login(request):
if request.method == "POST":
username = request.POST["username"]
password = request.POST["password"]
user = auth.authenticate(username=username, password=password)
if user:
auth.login(request, user)
return HttpResponse("Successfully logged in!")
else:
return HttpResponse("Username or Password is incorrect")
else:
return render(request, "login.html")
1.我认为如果我不使用 {% csrf_token %} 就可以解决这个问题,并且我尝试获取令牌并发送到 view.py 中的模板中进行渲染:
from django.middleware.csrf import get_token
csrf_token = get_token(request)
return render(request, 'login.html', {'csrf_token':csrf_token}
它没有解决问题,我仍然遇到该错误。
2.我认为这可能与csrf cookie值有关。每次我向数据库注册用户时,sessionid cookie 的值都会改变,而 csrf cookie 保持不变,但我不知道该怎么做。
如有任何帮助,我们将不胜感激!!
在django模板中,表单标签中应该有一个名为{% csrf_token %}的模板标签来传递csrf_token。例如
<form method="post">
{% csrf_token %} // this is mandatory for POST requests.
// other tags
<input type="text" name='text' />
<button type="submit">Submit</button>
</form>
完成此操作后,您可以这样做:https://stackoverflow.com/a/45490899/12098337