我想你可能把事情复杂化了。
要对用户进行身份验证,您需要从他们那里获得两条信息 - 一条是公开的(如他们的用户名),另一条是私人的,即他们的密码。
一旦您对用户进行了身份验证 - 确认他们就是他们所说的身份,也就是说,他们已经提交了有效的凭据,下一步就是弄清楚他们被授权做什么。
总是有两个不同的步骤 - 身份验证和授权。身份验证确认你是谁,授权决定你能做什么。
现在,在您的场景中,学生和教师正在登录。学生和教师之间的区别(除了具有不同的 id 模式)是他们可以在系统上做不同的事情。
所以问题在于确保您向用户提供了正确的授权。
他们验证的方式真的不重要。换句话说,不管学生是用他们的电子邮件地址登录还是教师是用他们的teacherid登录,最终的身份验证过程都是一样的。
现在,让我们进入 Django。默认情况下,在 Django 中,用户应该输入用户名。这可以是任何东西,只要它遵循两个规则:
- 最大长度为 150 个字符
- 只能包含字母数字、_、@、+、。和 - 字符
我们需要自定义这部分吗?不是真的,因为 studentid 和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 中的一些示例。