一文学会Flask-Login

Flask-Login是一个用于Flask应用程序的用户认证库。它提供了简单易用的API,用于处理用户的登录和注销,并提供了保护路由的功能。

一、Flask-Login的主要功能包括:

  1. 用户登录:Flask-Login提供了UserMixin类,用于表示用户模型。开发者只需要继承UserMixin,并实现必要的方法(如get_id()、is_authenticated()等),就能轻松地为用户建立登录功能。

  2. 用户认证:Flask-Login提供了login_required装饰器,用于保护需要登录才能访问的路由。当用户未登录时,Flask-Login会将其重定向到登录页面。

  3. 记住我功能:Flask-Login支持"记住我"功能,用户可以选择在关闭浏览器后仍然保持登录状态。开发者只需要设置REMEMBER_COOKIE_DURATION配置项即可。

  4. 用户注销:Flask-Login提供了logout_user()函数,用于处理用户注销的逻辑。开发者只需要调用该函数,即可清除用户的登录状态。

二、Flask-Login的使用步骤如下:

  1. 安装Flask-Login库:使用pip命令安装Flask-Login库。

  2. 创建用户模型:创建一个用户模型,继承UserMixin类,并实现必要的方法。

  3. 初始化Flask-Login:在Flask应用程序中,使用LoginManager类初始化Flask-Login。

  4. 创建登录视图:创建一个处理用户登录的视图函数,使用login_user()函数来登录用户。

  5. 创建注销视图:创建一个处理用户注销的视图函数,使用logout_user()函数来注销用户。

  6. 保护路由:使用login_required装饰器,保护需要登录才能访问的路由。

  7. 创建登录页面:创建一个登录页面的HTML模板,包含登录表单。

三、Flask-Login的使用示例:

  1. 安装Flask-Login:

    pip install flask-login
    
  2. 创建了一个LoginManager对象,并将其与应用关联起来,设置登录视图的名称为login

    # 创建LoginManager对象
    login_manager = LoginManager(app)
    
    # 设置登录视图, 
    # 在访问需要登录的视图时(加了@login_required的函数)
    # 如果没登录则重定向到`login`页面
    login_manager.login_view = 'login'
    
  3. 定义一个User模型,继承UserMixin类,实现一个get方法用于根据用户id查询用户信息

    # 定义User模型
    class User(UserMixin):
        def __init__(self, id):
            self.id = id
    
        @staticmethod
        def get(id):
            # 根据用户id查询用户信息
            # 这个方法根据你的具体实现而定
            return User(id)
    
  4. 使用@login_manager.user_loader装饰器加载用户的回调函数,用于根据用户id加载用户

    # 根据用户id加载用户
    @login_manager.user_loader
    def load_user(user_id):
        return User.get(user_id)
    
  5. 定义一个login视图,用于处理用户的登录操作。在示例中,我们简单地创建了一个User对象,并使用login_user函数将用户登录

    # 定义登录视图
    @app.route('/login')
    def login():
        user = User(1)
        login_user(user)
        return 'Logged in successfully'
    
  6. 定义一个logout视图,用于处理用户的登出操作。在示例中,我们使用logout_user函数将用户登出。

    # 定义登出视图
    @app.route('/logout')
    @login_required	
    def logout():
        logout_user()
        return 'Logged out successfully'
    
  7. 定义一个受保护的视图protected,使用了@login_required装饰器来保证只有登录的用户才能访问

    # 定义受保护的视图
    @app.route('/protected')
    @login_required
    def protected():
        return 'Protected content'
    
  8. 完整代码

    from flask import Flask
    from flask_login import LoginManager, UserMixin, login_user, logout_user, login_required
    
    app = Flask(__name__)
    app.config['SECRET_KEY'] = 'your_secret_key'
    
    # 创建LoginManager对象
    login_manager = LoginManager(app)
    
    # 设置登录视图
    login_manager.login_view = 'login'
    
    # 定义User模型
    class User(UserMixin):
        def __init__(self, id):
            self.id = id
    
        @staticmethod
        def get(id):
            # 根据用户id查询用户信息
            # 这个方法根据你的具体实现而定
            return User(id)
    
    # 根据用户id加载用户
    @login_manager.user_loader
    def load_user(user_id):
        return User.get(user_id)
    
    # 定义登录视图
    @app.route('/login')
    def login():
        user = User(1)
        login_user(user)
        return 'Logged in successfully'
    
    # 定义登出视图
    @app.route('/logout')
    @login_required
    def logout():
        logout_user()
        return 'Logged out successfully'
    
    # 定义受保护的视图
    @app.route('/protected')
    @login_required
    def protected():
        return 'Protected content'
    
    if __name__ == '__main__':
        app.run()
    

四、总结

  • LoginManager:登录管理对象
  • UserMixin:用户类需要继承这个,里面提供一些用户状态
  • login_user:用户登录后,将用户加入LoginManager进行管理
  • logout_user:用户登出之后,从LoginManager中注销用户信息
  • login_required:检查是否需要登录,在需要登录的视图上添加
  • 10
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值