zoukankan      html  css  js  c++  java
  • 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()
    

    一个奋斗中的产品小白
  • 相关阅读:
    link标签中的integrity和crossorigin字段
    jquery中的插件EChars的使用
    php函数 截断字符
    子元素脱离文档标准流,父元素没有高度解决办法
    有序无序Ul->Li Ol->Li菜单,默认点击当前弹出下拉,再次点击收起下拉菜单(变形2 ---修饰)
    有序无序ul->li ol->li菜单,默认点击当前弹出下拉,再次点击收起下拉菜单
    bootstrap使用总结(carousel设置大小。item设置大小,img设置大小)
    bootstrap使用总结(导航在carousel居中之上)
    html中设置height=100%无效的问题
    第四次上机课
  • 原文地址:https://www.cnblogs.com/dabai123/p/11271252.html
Copyright © 2011-2022 走看看