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}} 即当前访问的帐户

猜你喜欢

转载自www.cnblogs.com/lijintian/p/9050172.html