flask_login模塊實現過程
阿新 • • 發佈:2017-06-08
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模塊實現過程