#编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,
#后续的函数都无需再输入用户名和密码
# tag = True
tag = [True]
def rz(func) :
def inner() :
# global tag
# while tag :
while tag[0] :
name = input("please input your name:").strip()
passworld = input("please input your passworld:").strip()
with open("demo.py", 'r', encoding='utf-8') as read_f :
print()
if read_f.readline() == name+"\n" and read_f.readline() == passworld+"\n" :
# tag = False
tag[0] = False
func()
return inner
@rz
def func() :
print("lln")
@rz
def func1() :
print("lln1")
@rz
def func2() :
print("lln2")
func()
func1()
func2()
#方法二:(推荐)
auth_status = {
'user':None,
'status':False
}
def auth(func):
def inner(*args,**kwargs):
if auth_status['status']:
ret = func(*args, **kwargs) # index/home
return ret
else:
username = input('username : ').strip()
password = input('password : ').strip()
# 读文件获取用户信息
f = open('conf')
user_info = f.read()
user_dic = eva l(user_info)
if user_dic.get(username) and user_dic[username] == password:
print('login successful')
auth_status['user'] = username
auth_status['status'] = True
ret = func(*args,**kwargs) #index/home
return ret
else:
print('login failed')
return inner
@auth
def index():
print("欢迎来到首页")
@auth
def home():
print("欢迎回家")
index()
index()
home()
index()