这个例子比较复杂
# coding=utf-8
# Author: RyAn Bi
user,passwd = 'bb','' #输入用户名密码
def auth(auth_type): #装饰器第一层,确定鉴权类型
print('auth func:', auth_type ) #打印鉴权类型
def out_wrapper(func): #装饰器第二层,调用函数
def warrper(*args,**kwargs): #装饰器第三层,增加功能,具体实施
if auth_type == 'local': #判断鉴权类型
username = input('username:').strip() #输入用户名
password = input('password:').strip() #输入密码
if user==username and passwd ==password: #判断用户密码
print('\033[32;1mthe user is correct\033[0m')
res =func(*args,**kwargs) #from home #运行程序,并将程序运行结果导入res
print('=======>after authentication')
return res #返回func #将res结果返回给func,home程序输出‘from home
else:
exit('\033[31;1mthe user is invalid\033[0m')
elif auth_type =='ldap':
print('搞毛线啊,不会')
return warrper
return out_wrapper def index():
print('welcom to index page')
@auth(auth_type = 'local') #home =auth()
def home():
print('welcom to home page')
return 'from home'
@auth(auth_type = 'ldap')
def bbs():
print('welcom to bbs page') index()
print(home()) #调用home相当于调用warrper bbs()