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

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

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

代码如下:
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牛逼的地方还多着呢,别着急,我慢慢讲给你听。
好了,今天就到这里吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值