Flask博客項目-控制用戶狀態(十四)

此篇主要講的是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用來選擇是否保持登錄狀態

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章