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