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

  • 相关阅读:
    calcite介绍
    kylin介绍
    hbase(三)coprocessor
    流式计算-窗口
    实验室服务器琐事
    流畅的python笔记
    语义分割相关网络简述
    leetcode 696
    树的非递归遍历
    leetcode 665
  • 原文地址:https://www.cnblogs.com/aizhinong/p/11365135.html
Copyright © 2011-2022 走看看