使用django-allauth,如何通过AJAX登录获取表单错误?
我在/signup/
网址
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:错误请求
这让我不知道登录失败的原因。我希望能够向用户传达发生的事情。她的密码有问题吗?她的电子邮件地址是否已注册?
我可以使用all-auth完成此操作,还是需要从javascript编写自己的验证?
答案 0 :(得分:2)
我找不到支持的解决方案,所以我将其破解了:
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})
答案 1 :(得分:0)
您的代码存在的问题是缺少csrfmiddlewaretoken
。您应该将其包含在表单中(使用标记{% csrf_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()
},
...
django中的所有POST
个请求都需要此项。