django身份验证后端

问题描述:

我遵循扩展User类的method以在我的应用程序中实现自定义用户。django身份验证后端

正如链接中所述,需要编写自定义身份验证后端以便返回相应的自定义用户类而不是用户。

但是我有一个以上的自定义用户类,即Student,Teacher,Parent。

有没有比检查Student-> Teacher-> Parent表返回正确的自定义用户更好的方法?

我能想到的唯一解决方案是实际更改django使用的用户模型,并添加一个content_type字段,该字段可以告诉您实际用户对象是什么类型的用户。然后你可以直接在那个上查询。您每次仍需要2次查询才能获取正确的用户对象。

或者,您可以拥有一个从User继承的模型,该模型包含您的三个类所需的所有功能,例如将其称为SuperUser,并带有一个标识学生,教师或家长的特殊字段。

然后获取用户的超级用户对象,从而包含所有需要的数据。通过使用特殊字段标识它们是哪种用户类型,您可以为每种类型的用户(ProxyStudent,ProxyTeacher等)设置一个代理模型,以使其表现得像应该的那样。

这意味着无论如何您只有2次数据库命中,但只要您使用代理模型访问数据,就可以按指定的方式存储数据。

class SuperUser(User): 
    type = models.IntegerField(choices=[(0, 'Student'), (1, 'Teacher'), (2, 'Parent')] 
    # insert all the data for all 3 seperate classes here 

class ProxyStudent(SuperUser): 
    class Meta: 
    proxy = True 

    def special_student_method(self): 
    pass 


fetch request.user 
and make request.user an instance of SuperUser 


student = ProxyStudent() 
student.__dict__ = request.user.__dict__ 
+0

代理方法看起来很有趣,但是如何为例如Teacher实现类特定的字段? – goh 2011-02-07 15:50:22