Django allauth-如何从Ajax中获取表单错误?
使用django allauth,如何通过AJAX登录获取表单错误 我将此视图与我的Django allauth-如何从Ajax中获取表单错误?,django,django-allauth,Django,Django Allauth,使用django allauth,如何通过AJAX登录获取表单错误 我将此视图与我的/signup/url一起使用: from allauth.account.views import SignupView 它方便地接受了我的Ajax调用: var signupForm = function(token) { $.ajax({ url:"/signup/", type:"POST", data: { "ema
/signup/
url一起使用:
from allauth.account.views import SignupView
它方便地接受了我的Ajax调用:
var signupForm = function(token) {
$.ajax({ url:"/signup/",
type:"POST",
data: {
"email": $('#user').val(),
"password1": $('#pass1').val(),
"password2": $('#pass2').val()
},
success: function (){
location.href = '/';
window.location.reload(true);
},
error:function (er) {
alert("signup failure...",er);
}
});
};
不方便的是,如果表单有问题,它会返回:
错误400:请求错误
这让我不知道为什么登录失败。我希望能够向用户传达所发生的事情。她的密码有问题吗?她的电子邮件地址已经注册了吗
我可以用所有的auth来完成这项工作,还是需要用javascript编写自己的验证?您的代码的问题是缺少
csrfmiddlewaretoken
。您应该将其包含在表单中(带有标记{%csrf\u token%}
),然后将其添加到AJAX请求中,如下所示:
$.ajax({ url:"/signup/",
type:"POST",
data: {
"email": $('#user').val(),
"password1": $('#pass1').val(),
"password2": $('#pass2').val(),
"csrfmiddlewaretoken": $('<selector for the csrf token input>').val()
},
...
$.ajax({url://signup/“,
类型:“POST”,
数据:{
“电子邮件”:$('#user').val(),
“password1”:$('#pass1').val(),
“password2”:$('#pass2').val(),
“csrfmiddlewaretoken”:$('').val()
},
...
django中的所有
POST
请求都需要此项。您的代码的问题是缺少csrfmiddlewaretoken
。您应该将其包含在表单中(带有标记{%csrf\u token%}
),然后将其添加到AJAX请求中,如下所示:
$.ajax({ url:"/signup/",
type:"POST",
data: {
"email": $('#user').val(),
"password1": $('#pass1').val(),
"password2": $('#pass2').val(),
"csrfmiddlewaretoken": $('<selector for the csrf token input>').val()
},
...
$.ajax({url://signup/“,
类型:“POST”,
数据:{
“电子邮件”:$('#user').val(),
“password1”:$('#pass1').val(),
“password2”:$('#pass2').val(),
“csrfmiddlewaretoken”:$('').val()
},
...
django中的所有
POST
请求都需要此项。我找不到支持的解决方案,因此我对其进行了黑客攻击:
from django.http import JsonResponse
from allauth.account.views import SignupView, _ajax_response
class AjaxSignUpView(SignupView):
def post(self, request, *args, **kwargs):
form_class = self.get_form_class()
form = self.get_form(form_class)
if form.is_valid():
response = self.form_valid(form)
return _ajax_response(
self.request, response, form=form, data=self._get_ajax_data_if())
else:
return JsonResponse({'errors': form.errors})
我找不到支持的解决方案,因此我对其进行了黑客攻击:
from django.http import JsonResponse
from allauth.account.views import SignupView, _ajax_response
class AjaxSignUpView(SignupView):
def post(self, request, *args, **kwargs):
form_class = self.get_form_class()
form = self.get_form(form_class)
if form.is_valid():
response = self.form_valid(form)
return _ajax_response(
self.request, response, form=form, data=self._get_ajax_data_if())
else:
return JsonResponse({'errors': form.errors})
我有另一种交付CSRF cookie的工作方法,但感谢您的关注!我有另一种交付CSRF cookie的工作方法,但感谢您的关注!请注意,我刚刚发现您的帖子似乎是正确的,只是现在我想通过模式(引导)管理您的登录和注册ajax,还可以控制一些上下文变量。你的答案适合我,但只是不完整,而且最重要的是,你没有说我们如何在登录视图中做到这一点。你能为我发布一个更完整的答案,通过ajax注册和登录(当然是Django allauth的答案)?请…您还需要什么其他信息?您可以使用与
LoginView
完全相同的代码。这将把json对象中的错误发送回Ajax例程。请,我刚刚发现您的帖子似乎是正确的,只是现在我想通过模式(引导)管理您的登录和注册ajax,还可以控制一些上下文变量。你的答案适合我,但只是不完整,而且最重要的是,你没有说我们如何在登录视图中做到这一点。你能为我发布一个更完整的答案,通过ajax注册和登录(当然是Django allauth的答案)?请…您还需要什么其他信息?您可以对LoginView
使用完全相同的代码。这将把json对象中的错误发送回Ajax例程。