欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python 装饰器模拟京东登陆

程序员文章站 2022-05-08 20:26:20
要求:1、三个页面:主页面(home)、书店(book)、金融页面(finance)2、有两种登陆方式:主页面和书店页面使用京东账户登陆,金融页面使用微信账户登录2、输入:1 ,进入主页面,以此类推;输入:2 ,进入书店页面;输入:3 ,进入金融页面3、进入页面时检测有没有登陆,如果没有调用登陆接口... ......

要求:

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('请输入:\n1: [主页] \n2: [书店] \n3: [金融] \nq:退出')
    if user_input == '1':
        home()
    elif user_input == '2':
        book()
    elif user_input == '3':
        finance()
    elif user_input == 'q':
        break
注:文件里的账户信息格式如下,以字典的形式保存

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

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