python基础-day11 经典及不会做的题

 1 #  编写装饰器,为多个函数加上认证的功能,
 2 # 在每次执行被装饰函数之前让用户输入用户名,密码,给用户三次机会,登录成功之后,后面的函数不用再登陆,就可以执行,本功能类似如登陆一个购物网站,在一个页面登陆进去了,其他的页面就不需要登陆
 3 # ,正确的用户名和密码是: alex   123
 4 '''
 5 思路:
 6 需求==>要每一个函数进入前都判断是否是登陆状态,只要一个成功,其他都不用再登陆
 7 1、定义一个标签来标识登陆状态、初始状态是0,每次进入都判断是否登陆成功
 8 2、登陆成功的情况下、执行功能函数、标记下登陆状态
 9 3、未登录的情况下,开始三次登陆判断,登陆成功,执行功能函数,三次都不成功,退出
10 
11 '''
12 logging_status = 0  # 一开始是失败的、未登陆
13 def verify_user(fn):
14     def inner(*args, **kwargs):
15         '''函数执行之前'''
16         global logging_status
17         if logging_status == 1:     #登陆成功了,(注意:如果后面改变了flag值,故需要global flag)
18             ret = fn(*args, **kwargs) #直接执行函数
19             return ret  # 返回退出函数,相当于break
20         else:
21             counts = 1
22             while counts < 4:
23                 userName = input("请输入你的用户名:")
24                 password = input("请输入您的密码:")
25                 if userName == "alex" and password == "123":
26                     logging_status = 1  # 登陆成了改状态码
27                     ret = fn(*args, **kwargs)
28                     return ret   # 登陆成功了,结束函数
29                 counts += 1
30             else:  # 登陆三次失败退出
31                 return
32     return inner
33 
34 @verify_user
35 def add():
36     print("增加功能模块")
37     return 1
38 
39 @verify_user
40 def delete():
41     print("删除功能模块")
42     return 1
43 
44 @verify_user
45 def update():
46     print("修改功能模块")
47     return 1
48 
49 @verify_user
50 def select():
51     print("查询功能模块")
52 
53 add()
54 delete()
55 update()
56 select()
结果:

请输入你的用户名:alex
请输入您的密码:123
增加功能模块
删除功能模块
修改功能模块
查询功能模块 

猜你喜欢

转载自www.cnblogs.com/sunxiuwen/p/9188218.html
今日推荐