装饰器给函数添加验证功能

装饰器:高阶函数+嵌套函数+闭包
装饰器可以接收不定长参数、有返回值

def validate_login(func):
    def login(*args, **kwargs):
        user_name = input('请输入用户名:').strip()
        pwd = input('请输入用户密码:').strip()
        if user_name == 'alex' and pwd == '123456':
            res = func(*args, **kwargs) # 加上返回值
            return res
        else:
            print('用户名或密码错误')
    return login
@validate_login
def index():
    print('欢迎来到京东!')
@validate_login
def home():
    print('%s 欢迎回家!' % '产品经理')
@validate_login
def shopping_cart(naem):
    print('%s 购物车里有:[%s, %s, %s]' % ('产品经理', '手机', '电脑', 'ipaid'))
index()
home()
shopping_cart('产品经理')

记录登录状态

user_dic = {'user_name': None, 'login': False}
def validate_login(func):
    def login(*args, **kwargs):
        if user_dic['user_name'] == 'alex' and user_dic['login']:
            res = func(*args, **kwargs)  # 加上返回值
            return res
        else:
            user_name = input('请输入用户名:').strip()
            pwd = input('请输入用户密码:').strip()
            if user_name == 'alex' and pwd == '123456':
                user_dic['user_name'] = user_name
                user_dic['login'] = True
                res = func(*args, **kwargs) # 加上返回值
                return res
            else:
                print('用户名或密码错误')
    return login
@validate_login
def index():
    print('欢迎来到京东!')
@validate_login
def home():
    print('%s 欢迎回家!' % '产品经理')
@validate_login
def shopping_cart(naem):
    print('%s 购物车里有:[%s, %s, %s]' % ('产品经理', '手机', '电脑', 'ipaid'))
index()
home()
shopping_cart('产品经理')

user_list = [
    {'name': 'alex', 'passwd': 'alex123'},
    {'name': 'xueyi', 'passwd': 'xueyi123'},
    {'name': 'momo', 'passwd': 'momo123'}
]
current_user = {'name': None, 'login': False}
def auth_login(func):
    def login(*args, **kwargs):
        if current_user['name'] and current_user['passwd']:
            res = func(*args, **kwargs)
            return res
        user_name = input('请输入用户名:')
        passwd = input('请输入用户密码:')
        for i, v in enumerate(user_list):
            if user_name == v['name'] and passwd == v['passwd']:
                current_user['name'] = user_name
                current_user['passwd'] = passwd
                res = func()
                return res
        else:
            print('用户名或密码错误!')
    return login
@auth_login
def index():
    print('欢迎来到京东')
@auth_login
def home(name):
    print('%s 欢迎回家' % name)
index()
home('产品经理')

猜你喜欢

转载自blog.csdn.net/bus_lupe/article/details/84642626
今日推荐