flask之flask-login登陸驗證(一)


這個模塊能幫助我們做很多事,最常用到的是,登陸驗證(驗證當前用戶是否已經登陸)、記住我功能

一 安裝

 pip install flask-login

二 導入相關模塊及對象並初始化

from flask_login import login_manager, UserMixin


login_manager_local = login_manager.LoginManager()
login_manager_local.init_app(app)
login_manager_local.session_protection = 'strong'
login_manager_local.login_view = 'login'

 三 使用

1、定義一個User類

#繼承db.model 是為了方便操作數據庫

class User(db.Model, UserMixin):
    __tablename__ = 'users'
    id = db.Column(db.Integer, autoincrement=True, primary_key=True)
    username = db.Column(db.String(20), unique=True, index=True)
    pwd_hash = db.Column(db.String(300))

    def __init__(self, username, pwd):
        self.username = username
        self.pwd = pwd

    @staticmethod
    def query_by_username(username):
        return User.query.filter(User.username == username).first()

    @property
    def pwd(self):
        raise AttributeError(u'密碼不可讀')

    @pwd.setter
    def pwd(self, pwd):
        self.pwd_hash = generate_password_hash(pwd)

    def verify_password(self, pwd):
        return check_password_hash(self.pwd_hash, pwd)

    def __repr__(self):
        return '<User:%s>' % self.username

 

2、登陸

使用login_user登陸user后就可以使用登陸驗證@login_required

 

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'GET':
        form = LoginForm()
        return render_template('login.html', form=form)
    else:
        form = LoginForm(request.form)
        if form.validate():
            username = request.form['name']
            pwd = request.form['pwd']
            user = User.query_by_username(username)

            if user and user.verify_password(pwd):
                login_user(user)
                return 'login ok'
        else:
            print(form.errors)
        return render_template('login.html', form=form)

 

 

 

4、登陸驗證

 

@app.route('/')
@login_required
def hello_world():
    raise CustomFlaskErr(D_IP_MASK_FORMAT_ERROR)
    raise CustomFlaskErr(payload={u"錯誤": u"測試信息"})

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM