需求:比如说打开京东的网站,有很多很多功能,购物车啊,订单啊,但是你每打开一个功能,就必须验证你是否登录。(通过装饰器来实现)
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("产品经理")
浙公网安备 33010602011771号