需求:比如说打开京东的网站,有很多很多功能,购物车啊,订单啊,但是你每打开一个功能,就必须验证你是否登录。(通过装饰器来实现)

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("产品经理")