Best Practice for following multiple authentication backends in Django?

I am trying to implement an authentication system for 2 different sets of users in Django. A student(using his username & password), A developer (using his email & password). Currently I have a (common) UserProfile model which will be shared by Student, Developer. Here is my models code:

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    name = models.CharField(max_length=50, null=True, blank=True)
    slug = models.SlugField(max_length=50, db_index=True, unique=True)#this will be used as his unique url identifier
    objects = UserProfileManager()

    class Meta:
        abstract = True

class Student(UserProfile):
     ''' some student specific fields might go here '''

class Developer(UserProfile):
    ''' some developer specific fields might go here '''

And in settings.py I gave:

AUTH_PROFILE_MODULE = 'users.UserProfile'

I was getting authentication working with just UserProfile model. But as soon as I introduced Student, Developer the whole thing screwed up. I am getting

UserProfile has no attribute 'DoesNotExist'

(this is from the UserProfileManager exists method) and also

SiteProfileNotAvailable

error. (I am getting these errors even before I started writing email auth backend.). Am I missing anything ? What's the best path to follow to achieve what I wanted.


The problem might be the abstract definition of UserProfile. Things should work when you leave the 'abstract = True' away. But be aware of how this changes your table scheme.

链接地址: http://www.djcxy.com/p/33798.html

上一篇: 如何自定义用户模型/用于authenticate()的自定义后端

下一篇: 在Django中使用多个身份验证后端的最佳实践?