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

多层装饰器

 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