zoukankan      html  css  js  c++  java
  • 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"测试信息"})
  • 相关阅读:
    10/28总结
    10/27总结
    10/26总结
    10/25总结
    10/24总结
    毕业设计第二周整理规划
    毕业设计第一周第五天完成情况汇总
    毕业设计第一周第四天完成情况汇总
    毕业设计第一周第三天完成情况汇总
    毕业设计第一周第二天完成情况汇总
  • 原文地址:https://www.cnblogs.com/lfxiao/p/9184292.html
Copyright © 2011-2022 走看看