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