多层装饰器
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函数体
