zoukankan      html  css  js  c++  java
  • 装饰器认证功能

    在编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码。
    # 这个作业之上进行升级操作:
    # 设置两套密码,一套为微信账号密码,一套为qq账号密码保存在文件中。
    # 设置四个函数,分别代表
    # 京东首页,京东超市,淘宝首页,淘宝超市。
    # 循环打印四个选项:东首页,京东超市,淘宝首页,淘宝超市。
    # 供用户选择,用户输入选项后,执行该函数,四个函数都加上认证功能,只要登陆成功一次,在选择其他函数,后续都无需输入用户名和密码。
    # 相关提示:用带参数的装饰器。装饰器内部加入判断,验证不同的账户密码。

    dic = {
    'username':None,
    'status':False,
    }


    def login(flag):
    def wrapper(func):
    def inner(*args, **kwargs):
    if dic['status']:
    ret = func(*args, **kwargs)
    return ret
    else:
    i = 0
    while i < 3:
    username = input('请输入用户名(用%s账号):' % flag).strip()
    password = input('请输入密码:').strip()
    with open('user_pwd',encoding='utf-8') as f1:
    msg_dic = eval(f1.readline())
    # {'微信': {'password': '123', 'username': '老男孩'}, 'qq': {'password': '123', 'username': '老男孩1'}}
    if username == msg_dic[flag]['username'] and password == msg_dic[flag]['password']:
    dic['username'] = username
    dic['status'] = True
    ret = func(*args, **kwargs)
    return ret
    else:
    print('您输入的用户或者密码错误,请重新输入,还有%s次机会' % (2-i))
    i += 1
    return inner
    return wrapper




    @login('微信')
    def taobao_home():
    print('淘宝首页')

    @login('微信')
    def taobao_shop():
    print('淘宝超市')

    @login('qq')
    def jingdong_home():
    print('京东首页')

    @login('qq')
    def jingdong_shop():
    print('京东超市')

    choice_dict = {
    1: taobao_home,
    2: taobao_shop,
    3: jingdong_home,
    4: jingdong_shop,
    }

    while True:
    print('1 淘宝首页 2 淘宝超市 3 京东首页 4 京东超市')
    choice_num = input('请选择输入的序号:').strip()
    if choice_num.isdigit():
    choice_num = int(choice_num)
    if 0 < choice_num <= len(choice_dict):
    choice_dict[choice_num]()
    else:
    print('请输入范围内的序号')
    else:
    print('您输入的有非法字符,请重新输入')
  • 相关阅读:
    【WebService】WebService之WSDL文档深入分析(三)
    Android开发——发布第三方库到JitPack上
    Android破解学习之路(七)—— 乐秀视频编辑 内购破解 专业版 价值40元的破解
    Android破解心得——记学习七少月安卓大型安全公开课
    【转】Android播放音频MediaPlayer的几种方式介绍
    Android开发——EditText的属性使用
    Android开发——Fragment的简单使用总结
    Android开发——签名包的生成
    Android Stuido xml使用app属性没有提示代码
    Android开发——设置界面的创建
  • 原文地址:https://www.cnblogs.com/nicess/p/8709564.html
Copyright © 2011-2022 走看看