flask_login模块实现过程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了flask_login模块实现过程相关的知识,希望对你有一定的参考价值。

1、先创建用户表,该表继承flask_login 模块的UserMixin类

vi model.py

  技术分享

其中id字段是必须要有的,登录成功之后,每次请求界面,UserMixin类定义的获取该登录用户id的字段就是id

class UserMixin(object):
    ‘‘‘
    This provides default implementations for the methods that Flask-Login
    expects user objects to have.
    ‘‘‘
    if not PY2:  # pragma: no cover
        # Python 3 implicitly set __hash__ to None if we override __eq__
        # We set it back to its default implementation
        __hash__ = object.__hash__

    @property
    def is_active(self):
        return True

    @property
    def is_authenticated(self):
        return True

    @property
    def is_anonymous(self):
        return False

    def get_id(self):
        try:
            print ‘99222‘, self.id
            return text_type(self.id)
        except AttributeError:
            raise NotImplementedError(‘No `id` attribute - override `get_id`‘)

    def __eq__(self, other):
        ‘‘‘
        Checks the equality of two `UserMixin` objects using `get_id`.
        ‘‘‘
        if isinstance(other, UserMixin):
            return self.get_id() == other.get_id()
        return NotImplemented

    def __ne__(self, other):
        ‘‘‘
        Checks the inequality of two `UserMixin` objects using `get_id`.
        ‘‘‘
        equal = self.__eq__(other)
        if equal is NotImplemented:
            return NotImplemented
        return not equal

2、登录接口

vi views.py

   技术分享

前端验证成功后,通过login_user()函数记录登录状态

技术分享

该过程会将user_id,及前端请求header存入session


3、添加回调函数

根据user_id获取用户对象

@login_manager.user_loader

def load_user(user_id):

    return User.query.get(user_id)


user_loader会将load_user函数复于LoginManager()类的self.user_callback属性

技术分享

4、为其他函数加上@login_required装饰器

技术分享

当用户访问index时,会判断该用户的登录状态,会通过reload_user属性重新加载用户

技术分享

self.user_callback此时等于步骤3中的reload_user函数





以上是关于flask_login模块实现过程的主要内容,如果未能解决你的问题,请参考以下文章

[flask]flask_login模块,session及其他

flask_login 整合 pyjwt + json 简易flask框架

flask_login 中的 login_required 装饰器未重定向到上一页

如何使用模块化代码片段中的LeakCanary检测内存泄漏?

如何有条件地将 C 代码片段编译到我的 Perl 模块?

VsCode 代码片段-提升研发效率