flask之flask-login登陆验证

Posted lfxiao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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"测试信息"})

 

以上是关于flask之flask-login登陆验证的主要内容,如果未能解决你的问题,请参考以下文章

flask-login 学习

如何整合Flask-HTTPAuth和Flask-Login

Flask-HttpAuth 和 Flask-Login

使用Flask-Login注册登录

flask学习笔记(-用户)

在Flask和Flask-Login中删除会话cookie