zoukankan      html  css  js  c++  java
  • python学习-43 装饰器 -- 函数闭包2

    函数闭包为函数加上认证功能

    1.登陆账号

    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
    
            username = input('账号:').strip()
            passwd = input('密码:').strip()
            if username == 'abcd' and passwd == '123456':
                user_dic['username'] = username
                user_dic['login'] = True
                print('登陆成功!')
                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('小明')

    运行结果:

    账号:abcd
    密码:123456
    登陆成功!
    欢迎小明回家
    
    Process finished with exit code 0

    2.检测已有账号登陆

    user_list=[{'name':'abcd','passwd':'123456'},
               {'name':'abd','passwd':'123'},
               {'name':'acc','passwd':'123456'},
               {'name':'asdfg','passwd':'12346'}
    ]
    user_dac ={'username':None,'login':False}           # 获取刚开始登陆之前的状态
    
    def auth_func(func):
        def wrapper(*args,**kwargs):
    
            if user_dac['username'] and user_dac['login']:   # 获取刚开始登陆之前的状态,是否已登录
                res = func(*args,**kwargs)
                return res
    
            username = input('账号:').strip()
            passwd = input('密码:').strip()
            for user_dic in user_list:
                if username == user_dic['name'] and passwd == user_dic['passwd']:
                    user_dac['username'] = username
                    user_dac['login'] = True
                    print('登陆成功!')
                    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('sb')

    运行结果:

    账号:abd
    密码:123
    登陆成功!
    欢迎光临本网站
    欢迎sb回家
    
    Process finished with exit code 0
  • 相关阅读:
    2013 新春快乐
    石头剪刀布游戏
    【MTK】MTK 报错集锦
    爱上双节棍男生的十五个理由
    Jni下NDK开发的bug问题汇总
    NDK中c语言logcat环境的搭建
    Android中Alertdialog对话框点击消失?
    Android上关于cmwap/cmnet网络切换的疑惑?
    Jni调用方法产生java.lang.UnsatisfiedLinkError错误
    android.os.NetworkOnMainThreadException问题
  • 原文地址:https://www.cnblogs.com/liujinjing521/p/11218689.html
Copyright © 2011-2022 走看看