扩展用户模型以创建user2模型

时间:2014-07-14 09:21:50

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

我的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文档。

提前致谢!

2 个答案:

答案 0 :(得分:0)

您可以创建一个模型'用户'并通过将权限添加到组来定义权限。

让你的Django教师申请检查是否有小组老师。 您可以根据电子邮件(name.student @或name @)创建单独的表单或检查 在保存添加组的模型之前。

如果你想验证一个“用户”,那么保持is_active on False总是一个好主意。给了一封正确的电子邮件。

答案 1 :(得分: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提供用户注册,其中用户帐户通过电子邮件激活。这可以为您节省大量的工作。