python - 装饰器实战

装饰器为访问页面添加登录验证功能

# 定义用户信息词典
user_list = [
    {'name': 'alex', 'passwd': '123'},
    {'name': 'linhaifeng', 'passwd': '123'},
    {'name': 'wupeiqi', 'passwd': '123'},
    {'name': 'yuanhao', 'passwd': '123'},
]

# 初始化当前用户: 无用户名,登录状态为false
current_user = {'username': None, 'login': False}


# 装饰器
def auth_deco(func):
    # 定义闭包with可变参数
    def wrapper(*args, **kwargs):
        # 若已经登录,执行基本函数
        if current_user['username'] and current_user['login']:
            res = func(*args, **kwargs)
            return res
        # 未登录提示用户输入用户名和密码
        username = input('用户名: ').strip()
        passwd = input('密码: ').strip()

        # 遍历用户词典,验证密码
        for index, user_dic in enumerate(user_list):
            # 登录成功
            if username == user_dic['name'] and passwd == user_dic['passwd']:
                current_user['username'] = username
                current_user['login'] = True
                res = func(*args, **kwargs)
                return res
        # for else 结构,在break后执行
        else:
            print('用户名或者密码错误,重新登录')

    return wrapper


# 在进入主页之前执行用户验证功能
@auth_deco
def index():
    print('欢迎来到主页面')


# 在回家之前执行用户验证功能
@auth_deco
def home():
    print('这里是你家')


index()
home()

猜你喜欢

转载自blog.csdn.net/ZenG_xiangt/article/details/81629072
今日推荐