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',}

原文地址:https://www.cnblogs.com/ss-long/p/10427778.html