装饰器实现权限管理
from functools import wraps
#定义一个装饰器函数,用来实现权限控制
def auth_lv(auth_level):#这里参数输入用户等级,作为下面的判断标准
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
# 获取当前登录的用户信息,可以使用 session 或 g 对象
user_id = session.get('id')
print(f'当前session的ID:{user_id}')
if not user_id:
print('判断到未登录')
flash('您的身份信息已经过期,请重新登录','error')
return redirect('/login') #没有登录直接返回登录页
user = User.get_or_none(User.id == user_id)
print((f'当前权限:{user.auth}'))
# 判断用户是否登录,是否具有权限
if user.auth < 1:
flash('请验证身份', 'error')
return redirect('/daiyanzhen') # 没有登录直接返回登录页
elif user.auth < auth_level:
flash('权限不足,请联系客服', 'error')
return redirect('/acc')
return func(*args, **kwargs)
return wrapper
return decorator
引用权限:
#用户中心
@app.route('/acc')
@auth_lv(1) #这里设置了1,每次访问/acc路由都会先掉用auth_lv()函数
def acc():
return render_template('acc.html')