装饰器中闭包之加认证功能

类似京东商城,其实就是前端页面加后端功能的集合,所谓的后端功能其实就是各种函数。

这里所谓的认证,就是对于用户名和密码的一个校验。废话不多说,直接上需求,我们写代码搞一下。
需求:
写一段程序模拟京东商城,用装饰器来实现认证功能。

点击查看代码
代码如下:
name_list = [
    {'name':'alex','pwd':'123'},
    {'name':'jack','pwd':'456'},
    {'name':'rose','pwd':'789'}
]
name_dict = {'login':False}
def auth_func(func):
    def warpper(*args,**kwargs):
        if name_dict['login'] == True:
            res = func(*args,**kwargs)
            return res
        username = input('用户名:')
        pwd = input('密码:')
        for li in name_list:
            if li['name'] == username and li['pwd'] == pwd:
                name_dict['login'] = True
                res = func(*args,**kwargs)
                return res
        else:
            print('用户名或密码错误')
    return warpper

@auth_func #等同于come = auth_func(come)
def come():
    print('欢迎来到京东主页')

@auth_func
def home(name):
    print('欢迎%s回家' %name)

@auth_func
def shopping_car(commodity1,commodity2):
    print('购物车里有%s,还有%s,牛逼吧!' %(commodity1,commodity2))

if __name__ == '__main__':
    come()
    home('sb')
    shopping_car('黄金','美女')


输出结果:
用户名:jack
密码:456
欢迎来到京东主页
欢迎sb回家
购物车里有黄金,还有美女,牛逼吧!

上面代码的意思是如果输入的用户名和密码刚好在密码表name_list中,说明登录成功。既然登录成功进入到了京东主页,那么进入自己的页面和购物车就不需要再重复输入用户名和密码了,即调用函数home()和shopping_car()无须再输入密码。

上面这个函数就是用了装饰器实现登录功能,很牛逼吧!这才哪到哪,python牛逼的地方还多着呢,别着急,我慢慢讲给你听。
好了,今天就到这里吧!

posted @ 2024-07-07 19:06  疯狂Python  阅读(9)  评论(0编辑  收藏  举报