Django的AttributeError'用户'对象没有属性'后端'(但…它呢?)

为了在注册用户之后签署用户,我手动设置了user.backend属性。 它通常在我的意见。 在这个例子中,我试图通过AJAX注册用户。 这是引发一个AttributeError。

这是我的代码:

def register_async(request): if request.method=='POST': userform=MyUserCreationForm(request.POST) if userform.is_valid(): #username of <30 char is required by Django User model. I'm storing username as a hash of user email user=userform.save(commit=False) user.username=hash(user.email) user.backend='django.contrib.auth.backends.ModelBackend' user.save() auth.login(request,user) user_status=1 user_fname=user.first_name user_data=[{'user_status':user_status, 'user_fname':user_fname}] json_data=json.dumps(user_data) response=HttpResponse() response['Content-Type']="text/javascript" response.write(json_data) return response else: user_data=[{'user_status':"0"}] json_data=json.dumps(user_data) response=HttpResponse() response['Content-Type']="text/javascript" response.write(json_data) return response else: return HttpResponse() 

编辑 – 这是AJAX。 它看起来非常标准

  //ajax registration. $('input#register_submit').click(function(event){ $(this).attr('disabled','disabled'); $('<div class="register-animation"><img src="{{site}}media/ajax-loader3.gif"/></div>').appendTo('#register_modal_btn'); $.post("/register/", $('div#register_side form').serialize(), function(data){ $.each(data,function(){ if(this.user_status==1){ $('.register-animation').remove(); $('.right_section .top').html('<ul><li class="sep_nav">Hi, '+ this.user_fname + '</li><li class="sep+nav"><a href="http://nabshack.com/logout/">Log Out</a></li><li class="refar_friend"><a href="http://nabshack.com/referral/">Refer a friend and get $50</a></li></ul>'); $('#post_login_modal').dialog("close"); $('a.login').unbind('click'); $('li a.account').unbind('click'); } else{ $('input#register_submit').removeAttr('disabled'); $('.register-animation').remove(); window.location='{{site}}register'; } }); },'json'); return false; event.stopPropagation(); }); 

几乎这个确切的代码在我的非Ajax视图。 是什么赋予了?

谢谢

您必须先致电authenticate然后才能致电loginauthenticate在对象上设置了一个属性,注明哪个后端已经成功validation了它,并清除了它的login,这在代码中没有发生(这是缺less的属性)。

文档: https : //docs.djangoproject.com/en/1.8/topics/auth/default/#how-to-log-a-user-in – 检查出“首先调用authenticate() ”的小标注。

我将发布这个答案,但我欠它https://stackoverflow.com/users/558699/ben在上面的评论,和https://stackoverflow.com/a/5837046/1467342 。 我正在扫描这个问题,并错过了我正在寻找的是在评论中。 手动添加后端到目前为止是一个(哈克)修复:

 user.backend = 'django.contrib.auth.backends.ModelBackend' login(request, user) 

在这两种情况下,我依靠其他身份validation方法(电子邮件确认和pipe理身份validation会话)来validation以此用户身份login的权限。