当前位置:   article > 正文

如何在django中实现多用户类型_django auth 能支持多用户模块吗

django auth 能支持多用户模块吗

原文地址:https://simpleisbetterthancomplex.com/tutorial/2018/01/18/how-to-implement-multiple-user-types-with-django.html

规则:

1.即使有多个用户类型,也尽量用一个model来进行登录验证.

比如有teacher和student两个用户类型,建模的时候,用于登录验证的model应该用同一个User模型,可以添加is_teacher和is_student字段来区分用户类型.
class User(AbstractUser):
    is_student = models.BooleanField(default=False)
    is_teacher = models.BooleanField(default=False)
如果用户还有其他属性,可以使用一对一关系来记录
class Student(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
    quizzes = models.ManyToManyField(Quiz, through='TakenQuiz')
    interests = models.ManyToManyField(Subject, related_name='interested_students')

2.不要直接使用django内置的USER模型,即使它完全符合你的需求

你可以扩展内置的AbstractUser模型然后在settings中设置 AUTH_USER_MODEL的值

AUTH_USER_MODEL = 'classroom.User'

策略

1.用户类型固定切很少,则可以直接在model中添加字段

class User(AbstractUser):
    is_student = models.BooleanField(default=False)
    is_teacher = models.BooleanField(default=False)
如果用户类型比较多,则这样列出来就比较混乱了,可以采用choices的方式
class User(AbstractUser):
  USER_TYPE_CHOICES = (
      (1, 'student'),
      (2, 'teacher'),
      (3, 'secretary'),
      (4, 'supervisor'),
      (5, 'admin'),
  )

  user_type = models.PositiveSmallIntegerField(choices=USER_TYPE_CHOICES)
但是上面的方式有个缺陷,那就是你要么是student,要么是teacher,而不能同时属于两种角色,要实现这样的场景,可以新建Role表
class Role(models.Model):
  '''
  The Role entries are managed by the system,
  automatically created via a Django data migration.
  '''
  STUDENT = 1
  TEACHER = 2
  SECRETARY = 3
  SUPERVISOR = 4
  ADMIN = 5
  ROLE_CHOICES = (
      (STUDENT, 'student'),
      (TEACHER, 'teacher'),
      (SECRETARY, 'secretary'),
      (SUPERVISOR, 'supervisor'),
      (ADMIN, 'admin'),
  )

  id = models.PositiveSmallIntegerField(choices=ROLE_CHOICES, primary_key=True)

  def __str__(self):
      return self.get_display_id()


class User(AbstractUser):
  roles = models.ManyToManyField(Role)
下面是流程图

其他细节可以查看原文
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/306433
推荐阅读
相关标签
  

闽ICP备14008679号