您可以在Django中使用两个不同的自定义用户作为auth用户吗?

时间:2018-03-18 10:34:10

标签: python django django-users

因此,我想说我想要验证两个不同的用户(例如,学生有学生ID,教师有老师ID)。并且两者都说两者都有不同的ID模式。

我应该如何使用自定义用户?我应该从AbsractBaseUser扩展并在同一个班级中为他们使用BaseUserManager,还是为每个学生和老师制作不同的课程?

如果是这样,我应该怎么处理settings.py中的AUTH_USER_MODEL?

可以像#34; AUTH_USER_MODEL =(' accounts.StudentAccount',' accounts.TeacherAccount')一样写出来?

感谢您的任何帮助和回答!

1 个答案:

答案 0 :(得分:2)

我认为你可能会使事情变得复杂。

要对用户进行身份验证,您需要两条信息 - 一条是公开的(如用户名),另一条是私人密码。

一旦您对用户进行了身份验证 - 确认他们是他们所说的人,即他们已提交了有效凭据,下一步就是弄清楚他们有权做什么。

总有两个不同的步骤 - 身份验证和授权。身份验证确认您的身份,授权确定您可以执行的操作。

现在,在你的场景中,学生和老师正在登录。学生和老师之间的区别(除了具有不同的id模式)是他们可以在系统上做不同的事情。

所以问题是确保您向用户提供正确的授权

他们认证的方式确实无关紧要。换句话说,如果学生使用他们的电子邮件地址登录并且教师使用他们的老师登录也没关系 - 最后 - 身份验证过程是相同的。

现在,让我们来看看Django。默认情况下,Django中的用户应输入用户名。只要遵循两条规则,这可以是任何事情:

  1. 最大长度为150个字符
  2. 它只能包含字母数字,_,@,+ ,.和 - 字符
  3. 我们需要自定义这部分吗?不是真的,因为studentntid和teacherid都符合这些限制。

    下一部分是如何区分“学生”和“老师”?最简单的方法是extend the user model通过添加自定义标记来区分教师和学生:

    from django.contrib.auth.models import User
    
    class UserType(models.Model):
        user = models.OneToOneField(User, on_delete=models.CASCADE)
        flag = models.IntegerField(choices=((1, 'Student'),(2, 'Teacher')), default=1)
    

    现在,当您创建用户时 - 只需将此标志设置为1或2,具体取决于您要创建的用户类型。

    请记住,身份验证不会改变 - 只需要授权。

    然后,您可以使用此标志进一步限制此用户可以执行的操作。有些例子,请查看documentation