首页 > 代码库 > 定义有参装饰器为被装饰函数添加认证功能,定义有参装饰器为被装饰函数添加认证功能,三次验证失败锁定用户
定义有参装饰器为被装饰函数添加认证功能,定义有参装饰器为被装饰函数添加认证功能,三次验证失败锁定用户
#需求:定义有参装饰器为被装饰函数添加认证功能,用户信息的来源可以是文件也可以是ldap
# 三次验证失败锁定用户
1 def menu(): 2 #用户交互界面 3 user_name = input("请输入在用户名:") 4 password = input("请输入密码:") 5 return user_name,password #以元组形式返回值 6 ‘‘‘ 7 alex1 1111 8 alex2 2222 9 egon3 3333 10 ‘‘‘ 11 def write(): 12 #将用户名、密码和登录次数在文件中写成字典的格式 13 user_name_password= {}#设置一个空字典装用户名、密码和登录次数 14 with open("test", encoding="utf8") as date, open("test2", encoding="utf8", mode="w") as revise: 15 for line in date: 16 line1 = line.strip().split() #以空格分隔后是列表形式 17 user_name_password.setdefault(line1[0],[line1[1],0])#key值为用户名,value值为[密码,登录次数] 18 user_name_password = str(user_name_password) #将字典转换成字符串 19 revise.write(user_name_password) #将字典转换成的字符串写入文件test2 20 21 def main(): 22 write() #将用户信息、密码还有登录次数按字典格式写入另一个文件 23 while True: 24 res = menu()#用户名和密码输入,返回值为元组形式(用户名,密码) 25 with open("test2",encoding="utf8") as date: 26 user_name_password = {} #创建一个空字典,接收用户、密码和登录次数的的数据 27 for line in date: 28 user_name_password = eval(line) #将用户、密码和登录次数数据转化为字典 29 if res[0] in user_name_password and user_name_password[res[0]][1] == 3: 30 #文件中登录名已记录三次,禁止登录 31 print("登录次数过多锁定") 32 exit() 33 if res[0] in user_name_password and res[1] in user_name_password[res[0]][0] and user_name_password[res[0]][1] < 3: 34 #用户、密码匹配成功和登录次数小于三次,登录成功 35 print("successful") 36 current_login["name"] = res[0] 37 current_login["login"] = True 38 exit() 39 if res[0] in user_name_password and res[1] not in user_name_password[res[0]][0]: 40 #用户匹配,密码不匹配,拉入黑名单,登录次数+1 41 user_name_password[res[0]][1]=user_name_password[res[0]][1]+1 #登录次数+1 42 user_name_password.setdefault(res[0],user_name_password[res[0]][1]) #将字典中登录次数的信息进行修改 43 user_name_password = str(user_name_password) #将字典转换成字符串 44 with open("test3", encoding="utf8", mode="w") as revise: 45 revise.write(user_name_password) #匹配不成功,将信息写入文件 46 date.close() #改文件名需关闭文件 47 revise.close() #关闭文件需关闭文件 48 import os 49 os.rename("test2", "test_bak") 50 os.rename("test3", "test2") 51 os.remove("test_bak") #删除废文件 52 print("用户名或者密码错误,请重新输入") 53 else: 54 print("用户名或者密码错误,请重新输入") 55 56 current_login={"name":None,"login":False} #定义一个字典装已经登录用户的信息 57 def auth2(auth_type): 58 def auth(func): 59 def wrapper(*args,**kwargs): 60 if current_login["name"] and current_login["password"]: 61 res = func(*args,**kwargs) 62 return res 63 if auth_type == "file": 64 main() 65 res = func(*args,**kwargs) 66 return res 67 if auth_type == "ldap": 68 print("还他妈不会玩") 69 return wrapper 70 return auth 71 72 73 @auth2(auth_type="file") 74 def index(): 75 print("welcome beijing! ") 76 77 index()
定义有参装饰器为被装饰函数添加认证功能,定义有参装饰器为被装饰函数添加认证功能,三次验证失败锁定用户
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。