AttributeError:'用户'对象在Django中没有属性'check_password'错误?

时间:2013-02-06 09:52:51

标签: django django-authentication

我有一个自定义模型,我正在尝试进行身份验证:

class User(models.Model):
    #id = models.IntegerField(primary_key=True)
    #identifier = models.CharField(max_length=40, unique=True, db_index=True)
    username = models.CharField(max_length=90, unique=True, db_index=True)
    create_time = models.DateTimeField(null=True, blank=True)
    update_time = models.DateTimeField(null=True, blank=True)
    email = models.CharField(max_length=225)
    password = models.CharField(max_length=120)
    external = models.IntegerField(null=True, blank=True)
    deleted = models.IntegerField(null=True, blank=True)
    purged = models.IntegerField(null=True, blank=True)
    form_values_id = models.IntegerField(null=True, blank=True)
    disk_usage = models.DecimalField(null=True, max_digits=16, decimal_places=0, blank=True)
    #last_login = models.DateTimeField()

    objects = UserManager()
    USERNAME_FIELD = 'username'
    #check_password(password)
    class Meta:
        db_table = u'galaxy_user'

我在`设置中提到过这个。

AUTH_USER_MODEL ='fileupload.user'

 #views.py
        def login_backend(request):
            if request.method == 'POST':
                username = request.POST['username']
                password = request.POST['password']
                user = authenticate(username=username, password=password)
                if user is not None:
                    login(request, user)
                    return HttpResponseRedirect('/overview/')
                else:
                    return HttpResponseRedirect('/login_backend/')
            else:
                return render_to_response('login_backend.html', context_instance=RequestContext(request))

但是我收到了这个错误:

AttributeError: 'User' object has no attribute 'check_password' error 

我做错了什么?

4 个答案:

答案 0 :(得分:5)

custom user documentation所述,您的用户模型必须继承django.contrib.auth.models.AbstractBaseUser,这会添加所有相关方法。

答案 1 :(得分:0)

the documentation for Django 1.5(这是第一个使用AUTH_USER_MODEL的人)中,显示了替代用户模型必须具有的方法,其中之一是check_password。所以,IMO,你有两种方法来解决你的问题。

  1. 正确替换用户模型,提供所有必需的方法。
  2. 忘记替换用户模型和just write a custom AUTH BACKEND而不包括“AUTH_USER_MODEL”

答案 2 :(得分:0)

获取Django 1.5 RC。并且在编写自定义用户类时遵循these instructions

答案 3 :(得分:0)

从django.contrib.auth.hashers添加,在get_user_model之后导入check_password