zoukankan      html  css  js  c++  java
  • 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、定义欢迎进入京东界面:
    @verify
    def index():
        print("欢迎光临京东购物")
        return "请尽情放纵吧!!"
    
    
    # 2、定义购物车:
    @verify
    def shopping_cart(product):
        print("这是您所想购买的物品 %s,如有需要,清下单哦" % product)
    
    
    # 3、定义订单信息:
    @verify
    def 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")---->@verify
    def 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()
    问题:调用一个函数 要输入一次验证,调用一个函数 要输入一次验证,不正常
    解决:第一登陆后,保存状态,以供后续函数使用(定义一个全局变量)
  • 相关阅读:
    REBOOT Reload 可安装在优盘的 Windows 和 DOS 启动盘
    给博客添加框架固定式背景音乐
    假期太长,很无聊
    CISCO NAT 配置
    网络地址转换全面通
    [转]drupal用程序创建node的方法
    drupal文件上传表单的例子
    drupal6重建menu遇到的问题
    运行效率与开发效率的随想
    joomla jSeblod的研究
  • 原文地址:https://www.cnblogs.com/newmet/p/10037472.html
Copyright © 2011-2022 走看看