這個模塊能幫助我們做很多事,最常用到的是,登陸驗證(驗證當前用戶是否已經登陸)、記住我功能
一 安裝
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"測試信息"})
