python-day5-装饰器第二弹之多层装饰器

it2024-10-19  16

多层装饰器

1 #首先我们先实现一个简单的登陆与权限验证功能,注意看执行结果 2 USER_INFO = {} 3 4 def check_login(func): 5 def inner(*args,**kwargs): 6 if USER_INFO.get('is_login',None): 7 ret = func(*args,**kwargs) 8 return ret 9 else: 10 print('请登录!') 11 return inner 12 13 def check_admin(func): 14 def inner(*args,**kwargs): 15 if USER_INFO.get('user_type',None) ==2: 16 nnn = func(*args,**kwargs) 17 return nnn 18 else: 19 print('无权限查看') 20 return inner 21 22 23 @check_login 24 @check_admin 25 def index(): 26 print('index') 27 @check_login 28 def check_user(): 29 print('Ok') 30 31 def login(): 32 user = input('请输入用户名!') 33 if user == 'alex': 34 USER_INFO['is_login'] = True 35 USER_INFO['user_type'] = 1 36 elif user == 'liguangxu': 37 USER_INFO['is_login'] =True 38 USER_INFO['user_type'] = 2 39 40 def main(): 41 while True: 42 a=input('1、登陆 2、查看信息 3、查看管理员权限:') 43 if a == '1': 44 login() 45 elif a== '2': 46 check_user() 47 else: 48 index() 49 main() 50 #首先使用alex用户登录后我们设置他具有普通权限有查看你信息的权限,无查看管理员权限 51 >>>1、登陆 2、查看信息 3、查看管理员权限:1 52 >>>请输入用户名!alex 53 >>>1、登陆 2、查看信息 3、查看管理员权限:2 54 >>>Ok 55 >>>1、登陆 2、查看信息 3、查看管理员权限: 56 >>>无权限查看 57 #我们使用liguangxu用户继续登陆,赋给他管理员权限 58 >>>1、登陆 2、查看信息 3、查看管理员权限:1 59 >>>请输入用户名!liguangxu 60 >>>1、登陆 2、查看信息 3、查看管理员权限:3 61 >>>index 62 >>>1、登陆 2、查看信息 3、查看管理员权限:2 63 >>>Ok 64 #使用查看信息功能时只验证是否登陆,而查看管理员权限则不仅需要验证是否登陆后,还需要验证是否具有管理员权限 #两层装饰器,将check_admin以及index()函数当作参数传入check_login中,执行check_login函数体,遇到ret=func()执行check_admin以及index函数#将index函数当作参数传入check_admin中执行函数体遇到nnn=func()执行index函数体  

 

 

 

转载于:https://www.cnblogs.com/liguangxu/p/5565121.html

最新回复(0)