需求:比如说打开京东的网站,有很多很多功能,购物车啊,订单啊,但是你每打开一个功能,就必须验证你是否登录。(通过装饰器来实现)
def auth_func(func): def wrapper(*args,**kwargs): username=input("用户名:").strip() #将字符串的前后的空格都去掉 password = input("密码:").strip() if username=="sb" and password=="123": res=func(*args,**kwargs) return res else: print("用户名或密码错误") return wrapper @auth_func def index(): print("欢迎来到京东") @auth_func def home(name): print("欢迎回家%s"%name) @auth_func def shopping_car(name): print("%s的购物车里有[%s,%s,%s]"%(name,"奶茶","sister","wawa")) index() home("产品经理") shopping_car("产品经理")
但是存在问题,在上例中,运行了三个函数,但是登录成功之后,今后就不用再次输入用户名和密码了
user_dic={"username":None,"login":False} #记录一个登录状态 def auth_func(func): def wrapper(*args,**kwargs): if user_dic["username"]and user_dic["login"]: res = func(*args, **kwargs) #如果登录状态是true,直接运行返回就可以了 return res username=input("用户名:").strip() password = input("密码:").strip() if username=="sb" and password=="123": #如果登录成功,就应该保存登陆状态,之后再打开网页就不用再次输入了 user_dic["username"]=username user_dic["login"]= True #更改登录状态,之后就不用继续登录了 res=func(*args,**kwargs) return res else: print("用户名或密码错误") return wrapper @auth_func def index(): print("欢迎来到京东") @auth_func def home(name): print("欢迎回家%s"%name) @auth_func def shopping_car(name): print("%s的购物车里有[%s,%s,%s]"%(name,"奶茶","sister","wawa")) index() home("产品经理") shopping_car("产品经理")