3

認証しようとしているカスタムモデルがあります。

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

4 に答える 4

5

カスタム ユーザー ドキュメントで説明されているように、ユーザー モデルは から継承する必要がありますdjango.contrib.auth.models.AbstractBaseUser。これにより、関連するすべてのメソッドが追加されます。

于 2013-02-07T05:39:59.170 に答える
0

Django 1.5 RCを入手してください。カスタム User クラスを作成するには、次の手順に従います。

于 2013-02-06T15:50:51.473 に答える
0

Django 1.5 (AUTH_USER_MODEL を使用した最初のドキュメント) のドキュメントでは、代替の User モデルに必要なメソッドが示されています。そのうちの 1 つは check_password です。つまり、IMO、問題を解決するには 2 つの方法があります。

  1. 必要なすべてのメソッドを提供する User モデルを適切に置き換えます。
  2. ユーザーモデルを置き換えることを忘れて、「AUTH_USER_MODEL」を含めずにカスタムAUTH BACKENDを書くだけです
于 2013-02-06T10:37:05.110 に答える