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()
    

    一个奋斗中的产品小白
  • 相关阅读:
    利用avicap32.dll实现的实时视频传输
    异常错误:在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式
    很不错的python 机器学习资源
    基于C#的机器学习--目录
    C#WinForm无边框窗体移动----模仿鼠标单击标题栏移动窗体位置
    C# WinForm窗体控件GroupBox修改边框颜色控件
    wireshark抓包新手使用教程
    Winform开发框架之权限管理系统功能介绍
    自定义控件开发的调试及DesignMode的状态处理
    Winform开发框架之权限管理系统改进的经验总结(4)--用户分级管理
  • 原文地址:https://www.cnblogs.com/dabai123/p/11271252.html
Copyright © 2011-2022 走看看