装饰器的使用例题 模拟用户登录使用

def readfies(file): #定义读取用户账号和密码的函数,返回一个包含用户名和密码字典的列表
li1=[]
with open(file,"r+",encoding="utf-8")as user:
users=user.readlines()
for i in users:
i = eval(i.strip(" "))
li1.append(i)
return li1

user_stat = {"user":None,"login":False} #定义一个判断用户状态的变量
def auth_fuc(fuc): #装饰器函数
def authentication(*args,**kwargs): #先判断状态 状态是登陆状态直接执行被修饰的函数
if user_stat["user"] and user_stat["login"]:
rec=fuc(*args,**kwargs)
return rec #判断完状态后返回结果 函数执行结束,如果上面不成立直接执行到用户输入状态
ipname=input("请输入登陆用户名:")
pass_wd=input("请输入用户密码:")
users=readfies("userdb") #读取用户账号文件 做判断修改用户状态
for i in users:
if ipname == i["user_name"] and pass_wd == i["passwd"]:
user_stat["user"]=ipname
user_stat["login"]=True
rec=fuc(*args,**kwargs)
return rec
else: #出错重新输入
print("用户名或密码错误请重新输入。")
return authentication


def index():
print("欢迎来到购物网站")

@auth_fuc

def home(name):
print("欢迎【%s】回家" % name)

@auth_fuc
def gouwu_car(name):
print("【%s】的家里有%s,%s,%s" % (name, "矿泉水", "面包", "火腿肠"))

index()

print("user_state之前状态--->", user_stat)
home("小黑猪")
print("user_state之后状态--->", user_stat)

gouwu_car("小黑猪")
原文地址:https://www.cnblogs.com/Centwei/p/14428786.html