【问题标题】:extending the user model to create a user2 model扩展用户模型以创建 user2 模型
【发布时间】:2014-09-04 04:15:51
【问题描述】:

在我的 django 项目中,我需要两种登录方式,一种用于学生登录,一种用于教师登录。

我浏览了 Django 文档和其他互联网资源,并提出了一个简单的设计解决方案,但我不确定利弊,因为我对 Django 还是很陌生。

我想解决这个问题的方法:

1) 对于学生登录,我已成功集成 django-allauth,它运行良好。

2) 现在教师登录,我想建立一个模型如下:

class Teacher(models.Model):
    teacher = models.OneToOneField(User,unique=True)
    identifier = models.CharField(max_length=128)
    #other fields

3) 然后是这个模型的两个表单 - 教师的注册和登录以及电子邮件验证表单:这里我想我会在成功注册时创建教师对象和学生对象,但我会设置 is_active=False 并要求进行电子邮件验证。验证成功后,我会设置is_active=True,这样老师就可以成功登录了。

4) 避免学生登录教师部分,教师可以登录学生部分:这里我考虑了一个标识符字段,以避免经过身份验证的学生登录教师部分。

任何人都可以通过提供您对此解决方案的意见或提出一些更好的选择来帮助我,因为我仍在阅读越来越多的 Django 文档。

提前致谢!

【问题讨论】:

    标签: python django django-models django-authentication django-allauth


    【解决方案1】:

    我做了一个应用程序,它需要为学生、教师和其他几个不同的用户类别提供不同的权限级别。我不确定这是否是最好的方法,但我通过创建一个 UserProfile 来做到这一点,正如 Eagllus 所提到的,它有几个类别来说明它是什么类型的用户配置文件。比如:

    PROFILE_CHOICES = (
        ('TE', 'Teacher'),
        ('ST', 'Student'),
    )
    
    class UserProfile(models.Model):
        user = models.ForeignKey(User)
        profile_type = models.CharField(max_length=2, choices=PROFILE_CHOICES)
        '''other attributes'''
    

    然后您可以装饰您的视图,以便只有特定类型的用户可以访问它们。 我不清楚您在#3 中要做什么。听起来您希望将用户添加为教师和学生,但仅通过电子邮件验证使他们处于活动状态?

    我不熟悉 django-auth,但 django-registration 提供用户注册,其中用户帐户通过电子邮件激活。这可能会为您节省大量工作。

    【讨论】:

    • 实际上我正在尝试通过#3中的电子邮件验证来验证注册。实际上,我的学生登录从过去四个月开始在网上进行,大约有 1500 个注册,所以我不想对学生的登录机制进行任何更改。 UserProfile 的这个想法似乎不错。我正在进一步调查它,以便我可以让它在我的场景中工作。谢谢!!
    【解决方案2】:

    您可以创建单个模型“用户”并通过将它们添加到组来定义其中的权限。

    并让您的 Django 教师应用程序检查组教师中是否存在。 您可以根据电子邮件(name.student@ 或 name@)创建单独的表格或检查 在保存模型之前添加组。

    如果您想验证“用户”是否提供了正确的电子邮件,将 is_active 设置为 False 总是一个好主意。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-21
      • 1970-01-01
      • 2016-10-12
      • 2011-02-28
      • 2013-12-06
      • 2018-01-21
      • 1970-01-01
      相关资源
      最近更新 更多