1. 程式人生 > >flask_login模塊實現過程

flask_login模塊實現過程

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屬性

技術分享

[email protected]_required裝飾器

技術分享

當用戶訪問index時,會判斷該用戶的登錄狀態,會通過reload_user屬性重新加載用戶

技術分享

self.user_callback此時等於步驟3中的reload_user函數





flask_login模塊實現過程