django身份验证后端

时间:2011-02-07 14:49:47

标签: python django

我遵循扩展User类的method以在我的应用程序中实现自定义用户。

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

但是我有多个自定义用户类,即Student,Teacher,Parent。

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

1 个答案:

答案 0 :(得分:1)

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

或者,您可以拥有一个继承自User的模型,该模型包含您的三个类所需的所有功能,例如将其称为SuperUser,并使用一个特殊字段来标识它是学生,教师还是父母。

然后为用户获取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__