此篇主要講的是Flask-Login的運用:
首先先把先前在__init__.py中的login_manager相關的代碼進行移植,移動到extensions.py中,減小__init__.py的代碼量
然後在之前的基礎上,爲login_manager添加一個新的方法
from flask_login import LoginManager
login_manager = LoginManager()
login_manager.session_protection = 'strong'
login_manager.login_view = 'main.login'
login_manager.login_message = "Please login"
login_manager.login_message_category = "info"
@login_manager.user_loader
def load_user(userid):
from webapp.models import User
return User.query.get(userid)
這個函數用來檢查給定的id是否對應了一個正確的用戶對象
接着,是對User對象的處理,User對象需要添加一些方法,以滿足Flask_Login的要求
class User(db.Model):
id = Column(Integer(), primary_key=True)
username = Column(String(255))
password = Column(String(255))
posts = relationship('Post', backref='user', lazy='dynamic')
def __init__(self, username):
self.username = username
#方便Shell命令驗證
def __repr__(self):
return "<User '{}'>".format(self.username)
def set_password(self, password):
self.password = bcrypt.generate_password_hash(password)
def check_password(self, password):
return bcrypt.check_password_hash(self.password, password)
#以下是Flask-Login要求實現的方法:
def is_authenticated(self):
if isinstance(self, AnonymousUserMixin):
return False
else:
return True
def is_active(self):
return True
def is_anonymous(self):
if isinstance(self, AnonymousUserMixin):
return True
else:
return False
def get_id(self):
return self.id
其中, is_authenticated()函數:表示User對象是否登錄
is_active()函數:表示用戶是否通過了某種激活(註冊)
is_anonymous()函數:表示訪問者是否處於未登錄的匿名狀態
最後由login_user(user, remember=form.remember.data)進入登錄狀態
參數remember用來選擇是否保持登錄狀態