Python-23_装饰器-04_练习---无参装饰器、有参装饰器,,一、无参装饰器:京东


一、无参装饰器:

京东后端程序简写,并加上验证功能:
编写一个装饰器,提供验证功能:
# 用户信息表:user_list=[    {‘name‘:‘new1‘,‘passwd‘:‘123‘},    {‘name‘:‘new2‘,‘passwd‘:‘123‘},    {‘name‘:‘new3‘,‘passwd‘:‘123‘},    {‘name‘:‘new4‘,‘passwd‘:‘123‘},]dic = {"username": None, "login": False}   # 定义一个全局变量 记录当前用户的状态def verify(func):    def foo(*args, **kwargs):        if dic["username"] and dic["login"]:  # 判断:如果全局变量存在,执行这一步            res = func(*args, **kwargs)            return res        username = input("用户名:").strip()        password = input("密码:").strip()        for user_dic in user_list:            if username == user_dic["name"] and password == user_dic["passwd"]:                dic["username"]=username       # 全局变量重新赋值                dic["login"]=True                res = func(*args, **kwargs)                return res        else:            print("用户名或密码错误")    return foo# 1、定义欢迎进入京东界面:@verifydef index():    print("欢迎光临京东购物")    return "请尽情放纵吧!!"# 2、定义购物车:@verifydef shopping_cart(product):    print("这是您所想购买的物品 %s,如有需要,清下单哦" % product)# 3、定义订单信息:@verifydef order():    print("这是你以下订单详细信息")res = index()print(res)shopping_cart("奶茶")order()
问题:调用一个函数 要输入一次验证,调用一个函数 要输入一次验证,不正常
解决:第一登陆后,保存状态,以供后续函数使用(定义一个全局变量)
二、有参装饰器:
# 用户信息表:user_list=[    {‘name‘:‘new1‘,‘passwd‘:‘123‘},    {‘name‘:‘new2‘,‘passwd‘:‘123‘},    {‘name‘:‘new3‘,‘passwd‘:‘123‘},    {‘name‘:‘new4‘,‘passwd‘:‘123‘},]dic = {"username": None, "login": False}   # 定义一个全局变量 记录当前用户的状态def auth(auth_type="filedb"):           # 在原本无参装饰器外、再嵌套一个函数    def verify(func):        def foo(*args, **kwargs):            print("认证类型",auth_type)            if auth_type=="filedb":         # 判断认证类型                if dic["username"] and dic["login"]:  # 判断:如果全局变量存在,执行这一步                    res = func(*args, **kwargs)                    return res                username = input("用户名:").strip()                password = input("密码:").strip()                for user_dic in user_list:                    if username == user_dic["name"] and password == user_dic["passwd"]:                        dic["username"]=username       # 全局变量重新赋值                        dic["login"]=True                        res = func(*args, **kwargs)                        return res                else:                    print("用户名或密码错误")            elif auth_type=="1111":                print("认证类型是1111,执行此操作")            else:                print("认证类型是别的种类,执行此操作")                res = func(*args, **kwargs)                return res        return foo    return verify# 1、定义欢迎进入京东界面:@auth(auth_type="filedb")       # verify = auth(auth_type="filedb")---->@verifydef index():    print("欢迎光临京东购物")    return "请尽情放纵吧!!"# 2、定义购物车:@auth(auth_type="filedb")def shopping_cart(product):    print("这是您所想购买的物品 %s,如有需要,清下单哦" % product)# 3、定义订单信息:@auth(auth_type="1111")def order():    print("这是你以下订单详细信息")res = index()print(res)shopping_cart("奶茶")order()
问题:调用一个函数 要输入一次验证,调用一个函数 要输入一次验证,不正常
解决:第一登陆后,保存状态,以供后续函数使用(定义一个全局变量)

Python-23_装饰器-04_练习---无参装饰器、有参装饰器

评论关闭