当前位置: 首页 > 面试题库 >

使用多个用户类别实现Flask-Login

应翰飞
2023-03-14
问题内容

我正在编写一个具有多个充当用户的类的应用程序(例如,学校帐户和员工帐户)。我正在尝试使用Flask-
Login简化操作,但是我不太确定如何做到这一点,因此当用户登录时,我可以让我的应用检查用户名是否属于School帐户或职员帐户,然后正确登录。

我知道如何找出它属于哪种 类型 的帐户(因为所有用户名都必须是唯一的)。但是之后,我不确定如何告诉应用程序我希望它登录该特定用户。

现在,我只有一个通用登录页面。如果我为职员帐户和学校帐户分别创建登录页面会更容易吗?我正在通过Flask-SQLAlchemy使用MySQL数据库。


问题答案:

您可以使用特定角色定义每个用户。例如,用户“ x”可以是SCHOOL,而用户“ y”可以是“ STAFF”。

class User(db.Model):

    __tablename__ = 'User'
    id = db.Column(db.Integer,primary_key=True)
    username = db.Column(db.String(80),unique=True)
    pwd_hash = db.Column(db.String(200))
    email = db.Column(db.String(256),unique=True)
    is_active = db.Column(db.Boolean,default=False)
    urole = db.Column(db.String(80))


    def __init__(self,username,pwd_hash,email,is_active,urole):
            self.username = username
            self.pwd_hash = pwd_hash
            self.email = email
            self.is_active = is_active
            self.urole = urole

    def get_id(self):
            return self.id
    def is_active(self):
            return self.is_active
    def activate_user(self):
            self.is_active = True         
    def get_username(self):
            return self.username
    def get_urole(self):
            return self.urole

但是Flask-login还没有用户角色的概念,我写了自己的login_required装饰器版本来覆盖它。因此,您可能想要使用类似以下的内容:

def login_required(role="ANY"):
    def wrapper(fn):
        @wraps(fn)
        def decorated_view(*args, **kwargs):

            if not current_user.is_authenticated():
               return current_app.login_manager.unauthorized()
            urole = current_app.login_manager.reload_user().get_urole()
            if ( (urole != role) and (role != "ANY")):
                return current_app.login_manager.unauthorized()      
            return fn(*args, **kwargs)
        return decorated_view
    return wrapper

然后,可以在如下视图函数上使用此装饰器:

@app.route('/school/')
@login_required(role="SCHOOL")
def restricted_view_for_school():
    pass


 类似资料:
  • 问题内容: 我有一个应用程序,该应用程序可以获取一些信息,使用pandas进行一些计算,然后将最终的熊猫数据框转换为CSV,然后使用Flask应用下载。如何在一个视图中下载多个CSV?看来我一次只能返回一个响应。 示例片段: 因此,让我们在上面的示例中说,make_calculation返回了两个pandas数据帧。如何将它们都打印为CSV? 问题答案: 这是你使用所需的全部代码。它将返回一个包含

  • 问题内容: 有没有办法用Flask接收多个上传的文件?我尝试了以下方法: 然后打印内容 如果我上传多个文件,它将仅打印该集中的第一个文件: 是否可以使用Flask的内置上传处理方式接收多个文件?谢谢你的帮助! 问题答案: 你可以使用flask.request.files的方法getlist,例如:

  • 有没有办法用Flask接收多个上传的文件?我尝试了以下方法: 然后打印的内容: 如果我上载多个文件,它只打印集合中的第一个文件: 有没有一种方法可以使用Flask的内置上传处理来接收多个文件?谢谢你的帮助!

  • 我正在寻找创建应用程序,以验证用户使用面部识别。 我检查了Android是否提供生物识别提示来验证用户身份,但我不确定这个API是否可以用于我的用例。另外,如果我能使用这个API,手机上可以存储多少面部数据,这些数据将存储在哪里? 如果我不能实现我正在寻找的东西,通过面部识别,这是否可以使用指纹认证来完成。如果是,一个设备上可以存储多少指纹?

  • 在初步了解了SCS的构成后,对于想参与到MOAC子链的人来说,有三种参与方式: A、 SCS矿工:参与子链的节点共识并获得子链挖矿奖励; B、 DAPP开发者:作为子链DAPP开发者参与子链的业务逻辑开发; C、 VNODE代理:提供一个VNODE-PROXY,参与子链的匿名信息传递。 在MOAC的生态设计中,参与子链的角色有不同的责任和收益。 A. SCS矿工,需要在注册时付出一定数量的押金(一

  • 本文向大家介绍使用Python & Flask 实现RESTful Web API的实例,包括了使用Python & Flask 实现RESTful Web API的实例的使用技巧和注意事项,需要的朋友参考一下 环境安装: sudo pip install flask Flask 是一个Python的微服务的框架,基于Werkzeug, 一个 WSGI 类库。 Flask 优点: Written