使用不同的用户类型创建数据库表,并使用用户名和密码验证用户

时间:2016-03-22 05:10:43

标签: python django database models

我对模式创建感到困惑,所以你能否给我一个实现这个场景的想法

我有4种类型的用户学生,教师,家长和管理员

我试图为每个用户创建4个表,并为用户名,密码和令牌创建一个表,但我无法将此表与用户关联,因为多个用户不能拥有相同的用户名

我想要的是我需要用他们的用户名和密码验证每个用户,并且Student表可能与Parent表有关系!!!!

所以在验证时我需要知道他/她是哪种类型的用户

我正在使用python Django 1.9

3 个答案:

答案 0 :(得分:1)

您只需添加一个反映用户user_type的字段,而不是创建四个单独的表。

class CustomUser(AbstractBaseUser):

    ...
    [other model fields]
    ...

    USER_TYPE_CHOICES = (
        ('student', 'Student'),
        ('teacher', 'Teacher'),
        ('parent', 'Parent'),
        ('admin', 'Admin'),
    )

    user_type = models.CharField(choices=USER_TYPE_CHOICES, max_length=7)

通过这样做,所有用户都将拥有唯一的用户名,并且它们也将变得易于管理。

您只需访问其user_type即可检查用户类型,它会返回此文本值之一“学生,教师,家长和管理员”。因此,您将能够处理不同用户类型的业务逻辑。

答案 1 :(得分:1)

您可以使用Django身份验证系统: Using the Django authentication system  对于您可以使用的每个用户类别:Groups

  

django.contrib.auth.models.Group模型是对用户进行分类的通用方式,因此您可以申请   对这些用户的权限或其他标签。用户可以属于   任意数量的团体。

答案 2 :(得分:0)

创建四个表不是正确的方法。 或者你可以,

class User():

    id = Column(PrimaryKey)
    username = Column(String, constraints)
    password = Column(String, constraints)
    usertype = Column(Enum('student','teacher','parent','admin'))

- 代码仅用于表示。

要设置用户角色,您可以使用枚举属性。如果您使用的是SQLALchemy,请查看

How to create ENUM in SQLAlchemy?