zoukankan      html  css  js  c++  java
  • python 装饰器模拟京东登陆

    要求:

    1、三个页面:主页面(home)、书店(book)、金融页面(finance)
    2、有两种登陆方式:主页面和书店页面使用京东账户登陆,金融页面使用微信账户登录
    2、输入:1 ,进入主页面,以此类推;输入:2 ,进入书店页面;输入:3 ,进入金融页面
    3、进入页面时检测有没有登陆,如果没有调用登陆接口,使用账号密码登陆,在任何界面,只需登陆一次即可
    4、账户信息保存在文件里
    5、在任意界面,输入:Q   ,退出程序

    源代码:

    login_status = False  # 登录状态
    
    with open('账户信息', 'r') as f_read_self:
        jingdong = f_read_self.readline().strip()
        jingdong = eval(jingdong)   # 内置函数eval()的作用是把一个字符串转换为字典
        for n, m in jingdong.items():
            JD_name = n
            JD_pwd = m
    
    with open('账户信息(微信)', 'r') as f_read_wechat:
        wechat = f_read_wechat.readline().strip()
        wechat = eval(wechat)
        for n, m in wechat.items():
            wechat_name = n
            wechat_pwd = m
    
    
    def login(auth_type="jingdong"):   # 判断页面类型,默认进去是京东登录页面
    
        def page(dis_play):
            global login_status    # 声明全局变量
    
            def login_type():
                global login_status     # 声明全局变量
                if not login_status:    # 如果是未登陆状态
                    if auth_type == "jingdong":
                        username = input("Username:")
                        passwd = input("Passwd:")
                        if JD_name == username and JD_pwd == passwd:
                            print("welcome ....")
                            dis_play()   # 登陆成功执行页面函数,显示内容
                            login_status = True  # 改登陆状态为 True
                        else:
                            print("账户或密码错误,请重新输入")
                    elif auth_type == "wechat":
                        username = input("Username:")
                        passwd = input("Passwd:")
                        if wechat_name == username and wechat_pwd == passwd:
                            print("welcome ....")
                            dis_play()  # 登陆成功执行页面函数,显示内容
                            login_status = True  # 改登陆状态为 True
                        else:
                            print("账户或密码错误")
                else:
                    print("已登陆")
            return login_type   # 返回login_type 的内存地址,用于指向函数对象
        return page
    
    
    @login()
    def home():   # 主页面
        print("welcome to home page")
    
    
    @login()
    def book():  # 书店
        print("welcome to home page")
    
    
    @login(auth_type="wechat")
    def finance():  # 金融
        print("welcome to home page")
    
    
    while True:
        user_input = input('请输入:
    1: [主页] 
    2: [书店] 
    3: [金融] 
    Q:退出')
        if user_input == '1':
            home()
        elif user_input == '2':
            book()
        elif user_input == '3':
            finance()
        elif user_input == 'Q':
            break
    注:文件里的账户信息格式如下,以字典的形式保存

    账户信息: {'Tom':'qwe123',}

    账户信息(微信): {'Toms':'qwe123',}

  • 相关阅读:
    mysql dns反说明的成绩
    Solaris 11 安装图解(1)
    Meld 1.1.5
    Open Movie Editor-视频编纂器
    Solaris 11 装配图解(6)
    Pidgin 2.0.2
    Subversion 1.4.4 发布
    Solaris 11 安装图解(5)
    Solaris 11 安置图解(3)
    HTML 实体盘诘东西
  • 原文地址:https://www.cnblogs.com/ss-long/p/10427778.html
Copyright © 2011-2022 走看看