装饰器中闭包之加认证功能
类似京东商城,其实就是前端页面加后端功能的集合,所谓的后端功能其实就是各种函数。
这里所谓的认证,就是对于用户名和密码的一个校验。废话不多说,直接上需求,我们写代码搞一下。
需求:
写一段程序模拟京东商城,用装饰器来实现认证功能。
点击查看代码
代码如下:
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牛逼的地方还多着呢,别着急,我慢慢讲给你听。
好了,今天就到这里吧!