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"测试信息"})
原文地址:https://www.cnblogs.com/lfxiao/p/9184292.html