当前位置: 首页 > 面试题库 >

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

子车文康
2023-03-14
问题内容

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

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

还是应该使用..

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

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


问题答案:

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.


 类似资料:
  • 问题内容: 按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 我一直在阅读有关使用PHP创建PDF文件的信息,并且想知道最简单的选择是什么。 创建PDF模板,将其打开并替换占位符文本-我应使用哪个功能打开现有PDF进行编辑

  • 我正在阅读有关在有效 Java 中创建不可变类时需要遵循的特定准则。 我知道在不可变类中,方法不应该被覆盖,否则被覆盖的方法可能会改变方法的行为。下面是java中解决这个问题的设计方法 > 我们可以将类标记为final,但是根据我的理解,它有一个缺点,就是使类不可扩展。 其次是使单个方法最终化,但我不能得到其他缺点,除了我们需要单独将每个方法标记为最终,以防止覆盖。 根据书本,更好的方法是使构造函

  • 我正在AWS上开发一个多租户应用程序。我正在努力在Cognito上实现多租户。我的第一个方法是为整个应用程序使用一个认知用户池和一个标识池。 这个想法是为每个用户角色创建一个认知组,并将它们与各自的IAM角色相关联。工作正常。当使用组进行角色分配时,我将身份池经过身份验证的角色选择配置为“从令牌中选择角色”。 但是,对于20个租户,将需要40个组,每个用户池的认知组限制为25个。 每个租户使用一个

  • 本文向大家介绍ThreadPoolExecutor 创建方法最佳实践?相关面试题,主要包含被问及ThreadPoolExecutor 创建方法最佳实践?时的应答技巧和注意事项,需要的朋友参考一下 在《阿里巴巴 Java 开发手册》“并发处理”这一章节,明确指出线程资源必须通过线程池提供,不允许在应用中自行显示创建线程。 为什么呢? 使用线程池的好处是减少在创建和销毁线程上所消耗的时间以及系统资源开

  • 问题内容: 我有一百万行.txt格式的数据。格式很简单。对于每一行: 你知道我的意思。对于每个用户,它可能出现很多次,或者只出现一次(您永远不会知道)。我需要找出每个用户的所有值。因为用户可能会随机出现,所以我使用了Hashmap来做到这一点。即:HashMap(键:字符串,值:ArrayList)。但是要向arrayList添加数据,我必须不断使用HashMap get(key)来获取array

  • 在我的Java web应用程序中,我确实生成了一个报告,每个客户都检测到一个页面。 我已经创建了一个JasperReport,如果客户列表超过1个,我想连接生成的报告。 这是我的代码: 我想获取合并的PDF,但我找不到在ByteArrayOutputStream中导出JasperPrint列表的功能。 有什么建议吗?