手头开发一个登录项目,分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
pip install flask_login
pip install flask_login_multi
1.创建app,主要代码
from flask import Flask
from flask_login_multi.login_manager import LoginManager
app=Flask(__name__)
login_manager = LoginManager(app)
#用于各个蓝图跳转登录页的 endpoint
login_manager.blueprint_login_views = {
'user': "user.user_login",
'admin': "admin.admin_login",
}
2.创建蓝图,注册蓝图代码略过
admin_app = Blueprint('admin', __name__, url_prefix="/admin")
user_app = Blueprint('user', __name__, url_prefix="/user")
3. 模型里添加 user_loader,里面的endpoint名字对应蓝图的名字,user,admin
@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一样
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功能一样
from flask_login_multi import login_required,current_user
#管理首页
@admin_app.route('/index')
@login_required
def index():
print(current_user)
return 'admin.index'
6.退出当前用户
logout_user()
欢迎加入qq群交流 184596631
来源:oschina
链接:https://my.oschina.net/u/4391488/blog/3912117