• flask笔记三:flask-login插件的使用


    flask-login插件的使用

    安装:

                      pip install flask-login
    

    初始化LoginManager

    ##############LoginManager设置##################
    loginmanager=LoginManager()
    loginmanager.login_view='biziness.flask_login'     业务逻辑层中的flask_login视图函数
    loginmanager.session_protection='strong'
    loginmanager.login_message='pls login to access this page'
    ##################结束设置#####################
    
    ##############f################
    @loginmanager.user_loader
    def load_user(userid):
        from DataAccess.userModels import users
        return users.query.get(userid)
        
      注释:
          flask使用@loginmanager.user_loader所装饰的函数,检查给定的参数id是否对应返回了一个正确的用户对象
    #############################
    
    def CreateApp():
        '''
        init flask
        :return:
        '''
    
        path = os.path.abspath(os.path.curdir)
        templateFolder = os.path.join(path, 'templates')
        staticFilesFolder=os.path.join(path,'static')
        app=Flask(__name__,template_folder=templateFolder,static_folder=staticFilesFolder)
        app.config.from_object(devConfig)
        app.debug=False
        loginmanager.init_app(app)               #初始化,与app实例绑定
        bcrypt.init_app(app)
        return app
    

    要正常的使用flask-login,用户模型对象需要添加一些方法以满足flask的需要,如下所示:

    用户模型类

    from flask_login._compat import unicode
    from .DbInit import db
    from ext.config import bcrypt
    from flask_login import AnonymousUserMixin
    class users(db.Model):
    
        __tablename__ = 'User'
        id=db.Column(db.Integer,autoincrement=True,primary_key=True)
        username=db.Column(db.String(10),nullable=True)
        account=db.Column(db.String(100),nullable=True,unique=True)
        password=db.Column(db.BINARY(100),nullable=True)
        age=db.Column(db.Integer,nullable=True)
        job=db.Column(db.String(100),nullable=True)
        address=db.Column(db.String(100),nullable=True)
        userEmail=db.Column(db.String(100),nullable=True)
        groupId=db.Column(db.Integer,db.ForeignKey('Group.id'))
    
        def is_authenticated(self):
            if isinstance(self,AnonymousUserMixin):
                return False
            else:
                return True
        def is_active(self):
            return True
        def is_anonymous(self):
            if isinstance(self,AnonymousUserMixin):
                return True
            else:
                return False
        def get_id(self):
            return unicode(self.id)
    

    其中:

    is_authenticated:表示user对象是否登录
    
       is_active:表示用户是否激活,如:激活状态和未激活状态采用不同的处理
    
       is_anonymous:表示访问者是否处于未登录的匿名状态
    
       get_id:返回user对象的唯一识别标志
    

    视图处理函数:

    from werkzeug.utils import secure_filename
    from . import biz_blue
    from DataAccess.DbInit import db
    from Biziness.formClass.userInfo import users
    from DataAccess.userModels import users as u
    from flask import render_template
    from flask import request,session, redirect
    from ext import factory
    from flask_login import login_user,login_required,logout_user,current_user
    import os
    
    @biz_blue.route('/flasklogin/',methods=['GET','POST'])
    def flask_login():
        from Biziness.formClass.userInfo import users as userForm
        from  DataAccess.userModels import users
    
        user_form=userForm()
        if request.method=='GET':
            return render_template('Apps/login.html',form=user_form)
        else:
            account=user_form.account.data
            password=user_form.password.data
            user=None
            try:
                user=users.query.filter(users.account==account).one()
            except:
                return redirect('/flasklogin/')
    
            if user:
                login_user(user,remember=True)
            return redirect('/welcome/')
    
    @biz_blue.route('/welcome/')
    @login_required
    def welcomeLogedUser():
        user=current_user
        print(user.account)
        return 'welcome to our page!!!'
        
    @biz_blue.route('/loginout/')
    def logout():
        logout_user()
        return 'logout successful!!!'
    

    以上代码为使用flask-login插件的登录代码。

    flask-login还提供了一个current_user代理对象来访问当前的登录用户,这个对象在视图和模版中都可以使用

    在视图可以使用{{current_user}}来访问当前的用户对象,如果需要访问对象中的属性时,添加相应的属性访问即可,如{{current_user.account}} 即当前访问的帐户

  • 相关阅读:
    Syn Bot /OSCOVA 基础教程(2)
    Syn Bot /OSCOVA 介绍(1)
    如何访问阿里云内网数据库
    Winform项目中的Settings.settings与App.config
    WinForm项目开发傻瓜教程
    C++读取BMP文件
    boost异步tcp通信技术练习
    lex/flex 学习笔记 一
    流数据解析中高位地址转换的性能分析
    bash随笔
  • 原文地址:https://www.cnblogs.com/lijintian/p/9050172.html
Copyright © 2020-2023  润新知