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}} 即當前訪問的帳戶
