gpt4 book ai didi

python - Flask_login 的多个用户

转载 作者:太空宇宙 更新时间:2023-11-03 14:20:36 26 4
gpt4 key购买 nike

我有两个 Flask_login 用户模型:

class Admin(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(30))
password_hash = db.Column(db.String(200))

class Merchant(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(30))
password_hash = db.Column(db.String(200))

现在我想在 session 中加载用户:

@login_manager.user_loader
def load_user(user_id):
pass

我想知道如何从两个模型加载用户。

最佳答案

这是我迄今为止一直在使用的解决方案;我不知道它有什么缺陷,但这就是您正在寻找的答案。

假设您有多种帐户类型,关键是在登录时使用 session 存储该帐户类型,并像这样使用它:

@login_manager.user_loader
def load_user(user_id):
if session['account_type'] == 'Admin':
return Admin.query.get(int(user_id))
elif session['account_type'] == 'Merchant':
return Merchant.query.get(int(user_id))
else:
return None

不需要提供路由和html;您可以按照您的意愿实现它们,方法是:

  • 为不同的用户类型创建不同的路线。
  • 在登录表单中添加一个选择字段,为所有用户类型提供一个路由。

这个thread提供有关 session 以及如何保护 session 的更多信息;你应该检查一下。

我理解您选择将类分开,但请考虑将公共(public)属性合并到一个父类中,只留下 id 以防止外键问题,如下所示:

class Person(db.Model):
__abstract__ = True
name = db.Column(db.String(30))
password_hash = db.Column(db.String(200))

class Admin(Person, UserMixin):
id = db.Column(db.Integer, primary_key=True)

class Merchant(Person, UserMixin):
id = db.Column(db.Integer, primary_key=True)

由于父表是抽象的,因此不会创建它,但它的子表会创建。

关于python - Flask_login 的多个用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47973490/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com