flask Flask-Login 插件及继承 UserMixin 类、login_user 源码分析、session源码分析

本文详细分析了Flask-Login中的UserMixin类,阐述了其用于用户身份验证的关键属性和方法。接着,深入探讨了login_user函数的实现,包括remember参数、force参数和session有效期。最后,解析了Flask session的工作原理,从令牌生成到请求上下文的交互过程。
摘要由CSDN通过智能技术生成
一、继承 UserMixin 类

Flask 项目可以使用 Flask-Login 插件来实现登录功能,这是一个被广泛使用的优质第三方库。

登录功能设计用户表,我们要使用 Flask-Login 就需要让 User 映射类继承 UserMixin 类。修改 models.py 如下:

from flask_login import UserMixin


class User(Base, UserMixin):
    ...

继承 UserMixin 是干嘛呢?我们看下源码,这个类定义在 flask_login.mixins 模块中:
在这里插入图片描述
如上图所示的内容就是 UserMixin 的核心

Flask应用程序中使用Flask-Login并将用户会话存储在Redis中,可以通过继承Flask-LoginUserMixin并实现get_id()和from_id()方法来实现。然后使用Flask-Session和Redis扩展将会话存储在Redis中。 以下是一个示例: ```python from flask_login import UserMixin from flask_session import Session from redis import Redis from flask_redis import FlaskRedis redis_store = FlaskRedis() class User(UserMixin): def __init__(self, id): self.id = id @staticmethod def get(user_id): if not user_id: return None user_data = redis_store.get(user_id) if not user_data: return None return User.from_id(user_id) @staticmethod def from_id(user_id): user_data = redis_store.get(user_id) if not user_data: return None return User(user_id) def save(self): redis_store.set(self.id, {'id': self.id}) app.config['SESSION_TYPE'] = 'redis' app.config['SESSION_REDIS'] = Redis(host='localhost', port=6379) app.config['SESSION_USE_SIGNER'] = True Session(app) redis_store.init_app(app) ``` 在上面的示例中,我们创建了一个名为User,在其中实现了get_id()和from_id()方法。这些方法用于从Redis中获取用户数据和将用户数据保存到Redis中。 接下来,我们使用Flask-Session扩展和Redis扩展设置会话存储在Redis中。在初始化应用程序之前,我们需要设置Flask-Session配置和Redis连接配置。 最后,我们使用redis_store.init_app(app)将Redis扩展配置到Flask应用程序中。 这样,我们就可以在Flask应用程序中使用Flask-Login并将用户会话存储在Redis中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值