Django-AttributeError 'User' 对象没有属性 'backend'(但是……有吗?)

标签 django authentication django-models django-authentication

为了让用户在注册后登录,我手动设置了 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 View 中使用。给了什么?

谢谢

最佳答案

您必须先调用authenticate,然后才能调用loginauthenticate 在对象上设置一个属性,指出哪个后端已成功验证它并清除它以进行登录,这在您的代码中没有发生(这是缺少的属性)。

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

关于Django-AttributeError 'User' 对象没有属性 'backend'(但是……有吗?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6034763/

相关文章:

authentication - ASP.NET MVC2 应用程序中的第二层身份验证

python - Django:用于存储 float 列表的模型字段?

html - 响应式 onesite 网站填充到中心

python - 类型错误 : cannot unpack non-iterable bool object

django - 事务管理的 block 以挂起的 COMMIT/ROLLBACK 结束

python - 使用查询集 Model.objects.aggregate(Sum(***)) 对数据库列的所有值求和

django - 尝试制作一个看起来不像我的模型的 django Rest api

python - 如何在 Python 中用求和编写包含许多 AND 和 OR 的查询?

node.js - 使用 socket.io 进行用户身份验证

ruby-on-rails - 未定义的方法 `key?' 为 nil :NilClass