user_dic ={'username':None,'login':False}
def auth_func(func):
def wrapper(*args):
if user_dic['username'] and user_dic['login']:
return func
username=input('请输入用户名:')
passwd=input('请输入密码:')
while True:
if username=='111' and passwd=='111':
# res=func(*args)
user_dic['username']=username
user_dic['login']=True
break
else:
username = input('请输入用户名:')
passwd = input('请输入密码:')
func(*args)
return wrapper
@auth_func
def index():
print('欢迎来到>>>>>>>>>>.')
@auth_func
def home(name):
print(f'欢迎回来{name}')
index()
# -*- coding:utf-8 -*-
#!python3
user_list = [
{'name':'ad1','passwd':'123'},
{'name':'ad2','passwd':'123'},
{'name':'ad3','passwd':'123'},
{'name':'ad4','passwd':'123'}
]
#初始状态,用来保存登陆的用户,
client_dic = {'username':None,'login':False}
#添加新功能
def auth_func(func):
def wrapper(*args,**kwargs):
#参数检查,判断是否有用户登录,如果有,不用验证,直接执行函数的功能
if client_dic['username'] and client_dic['login']:
res = func(*args,**kwargs)
return res
#输入用户名和密码
username = input('用户名:').strip()
passwd = input('passwd:').strip()
#对比列表,检查用户名和密码是否正确
for user_dic in user_list:
if username == user_dic['name'] and passwd == user_dic['passwd']:
client_dic['username'] = user_dic['name']
client_dic['login'] = True
res = func(*args,**kwargs)
return res
else:
print('用户名或者密码错误!')
return wrapper
@auth_func
def index():
print("欢迎来到主页")
@auth_func
def home(name):
print("欢迎回家:%s"%name)
@auth_func
def shoppping_car():
print('购物车里有[%s,%s,%s]'%('奶茶','妹妹','娃娃'))
print(client_dic)
index()
print(client_dic)
home('root')
多个装饰器的执行顺序
def wrapper_out1(func):
print('--out11--')
def inner1(*args, **kwargs):
print("--in11--")
ret = func(*args, **kwargs)
print("--in12--")
return ret
print("--out12--")
return inner1
def wrapper_out2(func):
print('--out21--')
def inner2(*args, **kwargs):
print("--in21--")
ret = func(*args, **kwargs)
print("--in22--")
return ret
print("--out22")
return inner2
@wrapper_out2
@wrapper_out1
def test():
print("--test--")
return 1 * 2
if __name__ == '__main__':
test()
ans
–out21–
–out22
–out11–
–out12–
–in11–
–in21–
–test–
–in22–
–in12–
**
得加多个装饰器
**
import time
current_user = {
'username': None,
# 'login_time':None
}
def auth(func):
# func=index
def wrapper(*args, **kwargs):
if current_user['username']:
print('已经登陆过了')
res = func(*args, **kwargs)
return res
uname = input('用户名>>: ').strip()
pwd = input('密码>>: ').strip()
if uname == 'egon' and pwd == '123':
print('登陆成功')
current_user['username'] = uname
res = func(*args, **kwargs)
return res
else:
print('用户名或密码错误')
return wrapper
def timmer(func):
def wrapper(*args, **kwargs):
start_time = time.time()
res = func(*args, **kwargs)
stop_time = time.time()
print(stop_time - start_time)
return res
return wrapper
@timmer # timmer 统计的是auth+index的执行时间
@auth
def index():
time.sleep(1)
print('welcome to index page')
return 122
index()