装饰器实现权限管理

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')