Flask框架通过Flask_login实现用户登录功能示例
主要介绍了Flask框架通过Flask_login实现用户登录功能,结合实例形式较为详细的分析了flask框架使用Flask_login实现用户登陆功能的具体操作步骤、相关实现技巧与操作注意事项,需要的朋友可以参考下 在本文中,我们将深入探讨如何使用Flask框架和Flask_Login扩展来实现用户登录功能。Flask是一个轻量级的Python Web服务器网关接口(WSGI)应用框架,而Flask_Login则是一个专为Flask设计的用户身份验证库,它简化了处理用户会话和登录状态的过程。 要实现用户登录功能,你需要创建一个User模型来存储用户的登录信息。在`Model/User_model.py`中,我们定义了一个`User_mod`类,它包含了`is_authenticated`, `is_active`, `is_anonymous` 和 `get_id` 四个方法,这些都是Flask_Login要求的验证方法。`is_authenticated`返回`True`表示用户已认证,`is_active`通常也返回`True`表示用户账户有效,`is_anonymous`返回`False`表示这不是一个匿名用户,`get_id`返回用户唯一标识。此外,类还包含了一个`todict`方法,用于将对象转换为字典格式,便于数据传输。 接着,我们需要创建一个登录界面。在`templates/login.html`中,我们看到一个HTML表单,用户输入用户名和密码后提交。表单使用了Flask-WTF库来处理表单数据,`hidden_tag`用于添加CSRF保护,`username`和`password`字段是必填项,`remember_me`是可选的记住登录状态选项。 然后,在`User_dal/dal.py`中,我们配置了一个数据库连接池,使用了`pymysql`和`DBUtils.PooledDB`。这确保了高效且安全的数据库连接管理,特别是在并发访问时。 接下来,我们需要设置Flask应用并集成Flask_Login。在你的主应用文件中(如`app.py`),首先导入所需的库,然后初始化Flask应用和Flask_Login。创建一个自定义的`User`类,继承自`flask_login.UserMixin`,这样就不需要手动实现Flask_Login所需的四个验证方法了。然后,定义一个`load_user`回调函数,它接受用户ID并从数据库加载用户对象。 在处理登录请求的视图函数中,你可以使用`form`对象来验证用户输入,然后调用`login_user`函数来登录用户。如果用户尝试访问受保护的视图,可以使用`@login_required`装饰器来限制未登录用户的访问。 例如: ```python from flask import Flask, render_template, redirect, url_for, request from flask_login import LoginManager, UserMixin, login_user, logout_user, login_required, current_user app = Flask(__name__) login_manager = LoginManager() login_manager.init_app(app) class User(UserMixin): def __init__(self, id, username): self.id = id self.username = username @login_manager.user_loader def load_user(user_id): # 从数据库加载用户 user = User.query.get(int(user_id)) return user if user else None @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': # 验证用户名和密码 user = authenticate_user(request.form['username'], request.form['password']) if user: login_user(user) return redirect(url_for('protected')) return render_template('login.html') @app.route('/logout') @login_required def logout(): logout_user() return redirect(url_for('login')) @app.route('/protected') @login_required def protected(): return 'Welcome, {}!'.format(current_user.username) if __name__ == '__main__': app.run(debug=True) ``` 在上述代码中,`authenticate_user`函数负责验证用户名和密码,成功后返回对应的`User`对象。`login_required`装饰器确保只有登录用户才能访问`/protected`路由。 总结来说,通过Flask和Flask_Login,你可以轻松地构建一个具备用户登录功能的Web应用。Flask提供基础的路由和模板渲染功能,而Flask_Login则处理用户身份验证和会话管理,使得开发者能够专注于应用的核心业务逻辑,而不必操心复杂的登录流程。在实际项目中,你还需要考虑密码加密、错误处理、注册功能、找回密码等其他安全相关的功能。
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![thumb](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/release/download_crawler_static/12867601/bg1.jpg)
![avatar-default](https://csdnimg.cn/release/downloadcmsfe/public/img/lazyLogo2.1882d7f4.png)
![avatar](https://profile-avatar.csdnimg.cn/default.jpg!1)
- 粉丝: 2
- 资源: 878
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
最新资源
- 打包和分发Rust工具.pdf
- SQL中的CREATE LOGFILE GROUP 语句.pdf
- C语言-leetcode题解之第172题阶乘后的零.zip
- C语言-leetcode题解之第171题Excel列表序号.zip
- C语言-leetcode题解之第169题多数元素.zip
- ocr-图像识别资源ocr-图像识别资源
- 图像识别:基于Resnet50 + VGG16模型融合的人体细胞癌症分类模型实现-图像识别资源
- C语言-leetcode题解之第168题Excel列表名称.zip
- C语言-leetcode题解之第167题两数之和II-输入有序数组.zip
- C语言-leetcode题解之第166题分数到小数.zip
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)