1.编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),
要求登录成功一次,后续的函数都无需再输入用户名和密码
注意:从文件中读出字符串形式的字典,可以用eval('{"name":"egon","password":"123"}')
转成字典格式
![]()
1 定义一个字典看用户登录状态
2 auth_status={
3 'user':None,
4 'status':False#状态是没有登录
5 }
6 def wrapper(fun):
7 def inner(*args,**kwargs):
8 if auth_status['status']:#如果登录了,就执行fun函数
9 ret = fun(*args, **kwargs) # index/home
10 return ret
11 else:#如果没有登录,就实现认证功能
12 username = input('name:>>').strip()#获取用户名
13 password = input('password:>>').strip()#获取密码
14 f=open('login.txt','r',encoding='utf-8')#打开文件获取用户的信息
15 user_dic=f.read()#读出来的是字符串类型
16 zhddict=eval(user_dic)#转换成字典类型
17 #print(type(zhddict))#查看eval转换后的类型
18 if zhddict.get(username) and password == zhddict[username]:#如果用户名和密码都正确,就显示登陆成功,不正确就显示登录失败
19 print('login successful')
20 auth_status['user']=username #登陆成功后就把用户名放在user里
21 auth_status['status']=True 状态改为True
22 ret = fun(*args,**kwargs)#index/home
23 return ret
24 else:
25 print('login faild')
26 return inner
27 @wrapper #语法糖
28 def index():
29 print("欢迎来到首页")
30
31 @wrapper
32 def home():
33 print("欢迎回家")
34
35 index()
36 index()
37 home()
38 index()
View Code