我有三种用户类型,打算将它们存储在三个不同的数据库表中。结构如下:
master
,id
,teacher_userid
,student_userid
,parent_userid
和其他一些列的role
表。teacher
表,其中包含有关教师用户的详细信息(包括登录凭据)student
表,其中包含有关学生用户的详细信息(包括登录凭据)parent
表,其中包含有关父用户的详细信息(包括登录凭据)具有三个单独的表的原因是,每个表存储的数据将有很大的不同,用这种方法看起来更干净。
我希望任何类型的用户都可以通过我的Flask应用中的相同表单登录。 flask-login
应该查找master
表,然后应该从相关的teacher
,student
或parent
表中提取数据以填充用户模型。
但是,我很困惑如何用其他表中的数据有条件地填充User模型。
理想的方案是能够在User(db.model)
中添加类似的内容:
if 'Teacher' in role:
name = teacher.name
email = teacher.email
elif 'Student in role:
name = student.name
email = student.email
依此类推。但是,似乎不可能使用类似User类定义中的条件语句。吸气器和装夹器是解决方案吗?一切都感觉很混乱。
[我建议您将通用数据字段(例如凭据)存储在'主'用户表中,而仅将角色特定的字段存储在教师,家长和学生表中。
[老师,父母,学生表应具有对用户表的引用。
您可以将属性添加到您的flask-sqlalchemy用户类中,该类称为教师,学生和父母,该类返回相关的教师,学生,父母对象(教师也可能是父母)。
此模型允许您与用户相关的代码(例如登录名)针对User对象运行,并且您特定于角色的代码针对特定角色对象运行。