1

我在我的django项目中需要两种类型的登录,其中一个登录名为学生,一个登录名为教师。扩展用户模型以创建用户2模型

我已经浏览了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文档。

在此先感谢!

回答

0

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

并且让你的Django申请教师检查是否有在教师组中。 在保存添加组的模型之前,您可以创建单独的表单或基于电子邮件(name.student @或name @)和 进行检查。

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

0

我做了一个应用程序,需要不同的权限级别为学生,教师和几个不同的其他用户类别。我不知道这是否是最好的方法,但我通过创建一个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提供用户注册,其中用户帐户通过电子邮件激活。这可以为您节省大量的工作。

+0

其实我试图通过电子邮件验证在#3验证注册。实际上,我的学生登录信息从过去四个月起在网上直播,大约有1500个注册,所以我不想对学生的登录机制进行任何更改。 UserProfile的这个想法看起来不错。我正在进一步调查,以便在我的情况下能够正常工作。谢谢!! – gmfreak