zoukankan      html  css  js  c++  java
  • 编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码

    FLAG = False
    def wrapper(f):
        def inner(*args,**kwargs):
            global FLAG
            if FLAG:
                ret = f(*args, **kwargs)
                return ret
            lis = []
            i = 0
            while i < 3:
                i += 1
                with open('用户信息', mode='r', encoding='utf-8', ) as user:
                    username = input('请输入用户名:')
                    password = input('请输入密码:')
                    for line in user:
                        lis.append(line)
                    if username.strip() == lis[0].strip() and password.strip() == lis[1].strip():
                        print('登录成功,欢迎' + lis[0])
                        ret = f(*args, **kwargs)
                        FLAG = True
                        return ret
                    else:
                        print('登录失败,还剩{}次机会'.format(3 - i))
            else:
                return '账户已被锁定'
        return inner
    
    @wrapper
    def shopping_add():
        return '添加'
    @wrapper
    def shopping_del():
        return '删除'
    print(shopping_add())
    print(shopping_del())
    
    
    #打印:
    请输入用户名:aike
    请输入密码:123456
    登录成功,欢迎aike
    
    添加
    删除

    知识点:

    函数的装饰器

    文件操作

    global:解决重复登录的问题,第一次登录成功后,改变全局变量的值。程序执行时,再次调用装饰器函数,通过判断全局变量的值是否改变,改变后将不执行登录操作,直接执行被装饰的函数;

  • 相关阅读:
    清理yum源
    XZ压缩
    Linux命令之dot
    calltree查看工程代码中的函数调用关系
    valgrind 打印程序调用树+进行多线程性能分析
    LINUX 性能 测试 优化工具
    TCP/IP(84) 详解
    perf---LINUX内核研究
    廖雪锋笔记3:类型转换
    廖雪锋笔记2:list,tuble
  • 原文地址:https://www.cnblogs.com/aizhinong/p/11365135.html
Copyright © 2011-2022 走看看