一尘不染

django创建多个类型用户的最佳方法

django

我想在Django中创建多个用户。我想知道哪种方法最好。

class Teachers(models.Model):
    user = models.ForeignKey(User)
    is_teacher = models.BooleanField(default=True)
    .......

还是应该使用..

class Teacher(User):
    is_teacher = models.BooleanField(default=True)
    .......

还是我必须创建自定义用户模型…这将对创建多种类型的用户非常有用… ??


阅读 883

收藏
2020-03-31

共1个答案

一尘不染

Django没有多个用户-它只有一个用户,然后根据权限,用户可以执行不同的操作。

因此,首先-django中只有一种用户类型。如果你使用默认的身份验证框架User,则从将此用户的模型称为django.contrib.auth.models

如果要自定义django中的用户行为,可以执行以下三项操作:

  1. 自定义你如何对它们进行身份验证。默认情况下,身份验证是使用存储密码的数据库完成的。你可以通过facebook / google等进行身份验证,也可以通过现有的用户数据库进行身份验证-例如,如果你使用的是Windows网络,则可以使用ActiveDirectory进行身份验证。

  2. 创建自定义权限,并基于这些权限来限制用户可以执行的功能。默认情况下,在每个模型上-django将添加基本权限“可以编辑”,“可以删除”,“可以读取”。你可以创建自己的,然后检查用户是否具有这些特定权限。

  3. 你可以存储有关用户的其他信息,以及django通常存储的任何信息。有两种方法可以执行此操作,具体取决于你需要多少自定义。如果django默认情况下为你提供了一切,并且你要做的就是存储有关用户的额外信息,则可以扩展用户模型 -在以前的版本中,这称为创建自定义配置文件。如果你想进行更深入的自定义,则还有另一个选择是创建自己的User模型。自定义用户模型的最常见用法是是否要使用电子邮件地址作为用户名。

你不必全部执行这三个操作,实际上有时你要做的只是存储一些额外的信息,或者让他们使用其电子邮件地址进行身份验证。在某些应用程序中,你必须修改所有三个位置。

在你的情况下,由于你要做的只是存储有关用户的额外信息,因此你需要通过创建引用的模型来扩展用户模型User(请注意:你不会继承User):

class Profile(models.Model):
    user = models.OneToOneField(User)
    department = models.CharField(max_length=200, default='Computer Science')
    is_teacher = models.BooleanField(default=False)
    is_student = models.BooleanField(default=True)
    # .. etc. etc.
2020-03-31