python装饰器应用_python装饰器应用实例题

#5、编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件,只支持单用户的账号密码,给用户三次机会),#要求登录成功一次,后续的函数都无需再输入用户名和密码(升级题)

‘‘‘def verity_update(*func_name):

def inner(*args, **kwargs):

counts = 1

flag = 1

while flag:

if counts <= 3:

user_name = input("请输入您的用户名:").strip()

user_pwd = input("请输入您的密码:").strip()

with open("user_table.txt", "r",encoding="utf-8") as f:

for line in f:

line = line.strip().split(":")

name = line[0]

pwd = line[1]

if user_name == name and user_pwd == pwd:

print("登陆成功,欢迎光临{}".format(user_name))

ret = func_name(*args, **kwargs)

return ret

else:

print("用户名或密码错误,请重新输入,您还有%s次机会!" % (3-counts))

counts += 1

else:

print("3次都不中,洗洗睡吧,哥们/姐们儿……")

return

return inner‘‘‘logging_status= False #如果登陆成功后,就不用去登陆(如果在函数里写,会每次运行函数都将状态重设为false了,就导致,后面不管登陆没有都要重新登陆)

defverity_update(func):def inner(*args, **kwargs):global logging_status #要引用全局变量且改变其值logging_status

if logging_status: #如果已经登陆了,就不用再去登陆了,可以直接执行函数

ret = func(*args, **kwargs)returnretelse:

count= 1

while count < 4:

username= input("请输入您的用户名:").strip()

password= input("请输入您的密码:").strip()

with open(‘user_table.txt‘,encoding="utf-8") as f:for line inf:

line= line.strip().split(":")if username == line[0] and password == line[1]: #如果密码正确,就执行功能函数

logging_status = True #如果密码正确就是登陆成功,要改变登陆状态,不用再次登陆

ret = func(*args,**kwargs)returnretelse:print("密码不正确,重新登陆,还有%d次机会" %(3-count))

count+= 1

else:print("3次已过,bey-bey……") #3次还没过,就退出函数

return

returninner

@verity_updatedef func_name(*args, **kwargs):print(11)

@verity_updatedef func_name1(*args, **kwargs):print(22)

@verity_updatedef func_name2(*args, **kwargs):print(33)

func_name()

func_name1()

func_name2()

文件中拿出来比对

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值