python 装饰器模拟京东登录

要求:

一、三个页面:主页面(home)、书店(book)、金融页面(finance)
二、有两种登录方式:主页面和书店页面使用京东帐户登录,金融页面使用微信帐户登陆
二、输入:1 ,进入主页面,以此类推;输入:2 ,进入书店页面;输入:3 ,进入金融页面
三、进入页面时检测有没有登录,若是没有调用登录接口,使用帐号密码登录,在任何界面,只需登录一次便可
四、帐户信息保存在文件里
五、在任意界面,输入: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',}spa

相关文章
相关标签/搜索