• python课堂整理22----装饰器进阶


    一、函数闭包模拟session

    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)
                return res
            else:
                username = input("请输入用户名:")
                passwd = input("请输入密码:")
                if username == 'jinling' and passwd == '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)
    index()
    home('jinling')
    

    多账号认证:

    user_list = [
        {'name': 'liu', 'passwd': '521'},
        {'name': 'jinling', 'passwd': '123'},
        {'name': 'lala', 'passwd': '456'},
        {'name': 'sb', 'passwd': '000'},
        {'name': 'wocao', 'passwd': '222'}
        ]
    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)
                return res
            else:
                username = input('请输入用户名:')
                passwd = input('请输入密码:')
                for user in user_list:
                    if username == user['name'] and passwd == user['passwd']:
                        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():
        print('欢迎回家')
    index()
    home()
    

    添加认证方式:带参装饰器

    user_list = [
        {'name': 'liu', 'passwd': '521'},
        {'name': 'jinling', 'passwd': '123'},
        {'name': 'lala', 'passwd': '456'},
        {'name': 'sb', 'passwd': '000'},
        {'name': 'wocao', 'passwd': '222'}
        ]
    user_dic = {'username': 'None', 'login': False}
    def auth(auth_type = 'filedb'):
        def auth_func(func):
            def wrapper(*args, **kwargs):
                if auth_type == 'filedb':
                    if user_dic['username'] and user_dic['login']:
                        res = func(*args, **kwargs)
                        return res
                    else:
                        username = input('请输入用户名:')
                        passwd = input('请输入密码:')
                        for user in user_list:
                            if username == user['name'] and passwd == user['passwd']:
                                user_dic['username'] = username
                                user_dic['login'] = True
                                res = func(*args, **kwargs)
                                return res
                        else:
                            print('用户名或密码错误')
                elif auth_type == 'dsb':
                    print('难搞哦')
            return wrapper
    
        return auth_func
    @auth(auth_type='filedb')
    def index():
        print('欢迎来到京东主页')
    @auth(auth_type='dsb')
    def home():
        print('欢迎回家')
    index()
    home()
    

    一个奋斗中的产品小白
  • 相关阅读:
    状态模式
    maven-war-plugin 插件 web.xml 缺失时忽略
    Java远程方法协议(JRMP)
    Java Singleton的3种实现方式
    浅谈分布式消息技术 Kafka
    浅谈分布式事务
    J2EE开发时的包命名规则,养成良好的开发习惯
    使用Dom4j创建xml文档
    Java HttpClient Basic Credential 认证
    Spring MVC的Post请求参数中文乱码的原因&处理
  • 原文地址:https://www.cnblogs.com/dabai123/p/11271252.html
Copyright © 2020-2023  润新知