【问题标题】:Conditional statements in a Flask modelFlask 模型中的条件语句
【发布时间】:2020-01-25 17:29:34
【问题描述】:

我打算将三种用户类型存储在三个不同的数据库表中。结构如下:

  • master 表包含列 idteacher_useridstudent_useridparent_useridrole 和其他一些列。
  • teacher 表包含有关教师用户的详细信息(包括登录凭据)
  • student 表包含有关学生用户的详细信息(包括登录凭据)
  • parent 表包含有关父用户的详细信息(包括登录凭据)

拥有三个单独的表的原因是为每个表存储的数据会有很大不同,这样做看起来更干净。

我希望任何类型的用户都能够通过我的 Flask 应用程序中的相同表单登录。 flask-login 应该查找 master 表,然后应该从相关的 teacherstudentparent 表中提取数据以填充用户模型。

但是,我对如何使用其他表中的数据有条件地填充用户模型感到困惑。

理想的情况是能够将这样的内容添加到User(db.model)

if 'Teacher' in role:
  name = teacher.name
  email = teacher.email

elif 'Student in role:
  name = student.name
  email = student.email

等等。但是,似乎不可能在 User 类的定义中使用类似的条件语句。 getter 和 setter 是解决方案吗?这一切都感觉很混乱。

【问题讨论】:

标签: mysql flask flask-sqlalchemy flask-login


【解决方案1】:

我建议您将通用数据字段(例如凭据)存储在“主”用户表中,并且仅将角色特定字段存储在教师、家长、学生表中。

teacher、parent、student 表应该有对 user 表的引用。

您可以将属性添加到您的 flask-sqlalchemy 用户类,称为教师、学生和父对象,这些属性返回相关的教师、学生、父对象(教师也可能是父对象)。

此模型允许您的用户相关代码(例如登录)针对用户对象运行,并且您的角色特定代码针对角色特定对象运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-04
    • 1970-01-01
    • 1970-01-01
    • 2019-10-05
    • 1970-01-01
    • 2019-04-04
    • 1970-01-01
    • 2020-01-26
    相关资源
    最近更新 更多