手头开发一个登录项目,分user 和admin 表,需要分别登录前后台,flask 的扩展flask-login 已有的功能不能满足需要
所以打算研究一下源代码,扩展一下功能。
项目 user 和admin 两个模块,分别用于用户中心和管理后台区分。
所以有了思路,flask-login里面的session用endpoint的名字分别记录 user 和admin 的登录状态
完整模块
https://github.com/siaoynli/flask_login_multi
pipy地址
https://pypi.org/project/Flask-Login-Multi/
安装好 flask-login 和 flask-login-multi
1 2 | pip install flask_login pip install flask_login_multi |
1.创建app,主要代码
1 2 3 4 5 6 7 8 9 10 11 | from flask import Flask from flask_login_multi.login_manager import LoginManager app = Flask(__name__) login_manager = LoginManager(app) <br> #用于各个蓝图跳转登录页的 endpoint login_manager.blueprint_login_views = { 'user' : "user.user_login" , 'admin' : "admin.admin_login" , } |
2.创建蓝图,注册蓝图代码略过
1 2 | admin_app = Blueprint( 'admin' , __name__, url_prefix = "/admin" ) <br> user_app = Blueprint( 'user' , __name__, url_prefix = "/user" ) |
3. 模型里添加 user_loader,里面的endpoint名字对应蓝图的名字,user,admin
1 2 3 4 5 6 | @login_manager .user_loader def load_user( id , endpoint = 'user' ): if endpoint = = 'admin' : return Admin.query.get( id ) else : return User.query.get( id ) |
4.登录用户或管理员,功能和flask-login一样
1 2 3 4 5 6 7 8 9 | from flask_login_multi import login_user #user user = User.query.filter_by(name = form.name.data).first() login_user(user,remember = True ) #admin user = Admin.query.filter_by(name = form.name.data).first() login_user(admin) |
5.权限 ,和flask-login功能一样
1 2 3 4 5 6 7 8 9 | from flask_login_multi import login_required,current_user #管理首页 @admin_app .route( '/index' ) @login_required def index(): print (current_user) return 'admin.index' |
6.退出当前用户