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

相關文章
相關標籤/搜索