day1做業--登陸接口

做業:編寫登錄接口json

  • 輸入用戶名密碼
  • 認證成功後顯示歡迎信息
  • 輸錯三次後鎖定

    知識:api

    1.循環的使用;數組

  2.continue,break在循環中中斷的做用;網絡

  3.文件的寫入,讀取;架構

  4.各基礎知識的穿插應用app

    1、程序架構圖dom

    二、程序流程圖以下:函數

 

    3、具體代碼及思路以下:學習

    1.導入模塊,及主程序頁面測試

import os,json,random

def main_show():
    '''進入主頁展現'''
    login_message = '''
-------------------------------------------------------------------------------------------------
                                 您好,歡迎來到京東二貨市場
-------------------------------------------------------------------------------------------------1】登陸              【2】註冊                 【3】解鎖               【q】退出
-------------------------------------------------------------------------------------------------
'''
    print(login_message)

    設置程序進入樣式,告訴用戶進去是什麼樣子,平臺的功能,而不是進去啥都沒有。程序要使用到os,json,random標準庫。

    2.存儲用戶文件的讀寫

def test_file(file):
    '''
    驗證存儲用戶的文件是否存在,不存在生成
    :param file: 文件名
    :return: 無返回值
    '''
    if os.path.exists(file):          #判斷用戶文件是否存在,不存在生成一個用戶文件
        pass
    else:
        with open(file,"w+") as f:
            users = {}
            json.dump(users,f)

def read_file(file):
    '''
    從用戶文件中讀取用戶列表,以方便進行驗證
    :param file: 文件名
    :return: 返回讀取的用戶列表
    '''
    with open(file,'r+') as fr:
        users = json.load(fr)

    return users

def write_file(users,file):
'''
把修改後的用戶列表從新寫入進去
:param users: 用戶名列表
:param file: 文件名
:return: 無返回值
'''
with open(file,'w+') as fw:
json.dump(users,fw)

    第一段函數是判斷用戶文件是否存在,若是不存在則生成一個用戶文件,若是存在了則不生成,爲何要這樣呢?防止若是用戶文件存在,咱們會使用"w+"打開文件的時候把裏面的文件信息清空;若是不存在的話,咱們就生成用戶文件,而且使用json模塊把一個空的用戶字典寫入文件中,方便下面讀取添加用戶信息。

    第二段函數是讀取文件信息,而且以字典形式返回用戶字典,這樣,咱們就能夠在字典中操做用戶信息了,字典的功能咱們都會;另外把讀取的功能封裝到一個函數中,在後面咱們常常會用到,好比用戶惟一性驗證;修改用戶列表的時候都要打開文件。

    第三段函數是從新寫入文件中,以"w+"的模式,清空以前的用戶列表,從新寫入進去,當咱們修改用戶信息的時候,都須要從新寫進去。

    上面判斷用戶文件是否存在的時候,咱們用到了os.path.exists(),這個是用來判斷文件是否存在的,存在返回True,不然False。

    3.隨機驗證碼生成

def random_code(length):
    '''
    隨機驗證碼生成模塊
    :param length: 驗證碼的長度,本身定義多長的驗證碼,開發人員本身定製
    :return: 返回生成的隨機驗證碼
    '''
    codes = []
    for i in range(length):
        num = random.randrange(length)
        if i == num:
            code = random.randint(0,9)
            codes.append(str(code))
        else:
            capital_codes = list(range(65,91))     #小寫字符隨機驗證碼數字
            capital_codes.extend(list(range(97,123)))  #大寫數字隨機驗證碼數字
            tem_code = random.choice(capital_codes)   #random.choice()隨機跳跳出一個元素,由於隨機,不知道跳出那個
            codes.append(chr(tem_code))
    rand_code = "".join(codes)
    return rand_code

    上面代碼是用來生成隨機驗證碼的,length是隨機驗證碼的長度,咱們能夠本身定義長度,驗證碼是由數字,大寫,小寫字母組成,是隨機生成的,咱們知道,大寫字符是從:65-90,小寫字母是從:97-122,咱們先把這兩個範圍的數放到一個列表中,而後使用random.choice()從列表中隨機挑選一個數字,而後進行轉碼,轉換成字母形式, 這裏要注意的是列表功能extend(),這個功能沒有生成新的列表,如list1.extend(list2),是把list2中的元素擴展到list1中,改變list1。

    在這裏,咱們也用到了字符串中的拼接str.join(),因爲把列表元素拼接成一個新的字符串。

    4.登陸函數

def log_in(users):
    '''
    登陸模塊
    :param user: 用戶名
    :param pwd: 密碼
    :param users: 用戶列表{"alex":[123456,"unlocked","15111252591"}
    :return: 無返回值
    '''
    flag = True
    while flag:
        user = input("請輸入您的用戶名:")
        if user in users.keys():
            '''判斷用戶名是否存在,存在以後驗證是否鎖定,若是鎖定告訴要聯繫管理員解鎖'''
            if users[user][1] == 'locked':
                print("對不起,您輸入的密碼已經鎖定,請聯繫管理員解鎖!!!")
                break
            '''咱們知道,咱們登陸網站都是先驗證用戶名存在不存在,若是存在了,就輸入密碼,可是不會先驗證密碼,而是輸入驗證碼
            ,驗證碼輸入以後,驗證驗證碼是否正確,若是驗證碼正確纔會驗證密碼'''
            pwd = input("請輸入您的密碼:")
            '''輸入驗證碼,而且先驗證驗證碼是否正確,驗證碼輸入是沒有限制的,一直到你輸入對位置'''
            while True:
                random_num = random_code(6)    #調用隨機驗證碼生成函數,生成一個6位數的隨機驗證碼
                print("驗證碼:",random_num)
                verification_code = input("請輸入驗證碼:").lower()
                if verification_code == random_num.lower():
                    break
                else:
                    print("驗證碼輸入有誤,請從新輸入:")
                    continue
            '''驗證碼驗證完畢以後,該驗證密碼,密碼和驗證碼不同,密碼是有輸入次數限制的,密碼只能輸入三次'''
            try_num = 0
            while try_num < 3:
                if pwd == users[user][0]:
                    print("登陸成功,歡迎來到京東二手市場!")
                    flag = False
                    break
                else:
                    if try_num != 2:
                        print("您輸入的密碼有誤,你還有%s次鎖定用戶!" %(2-try_num))
                        pwd = input("請輸入您的密碼:")
                    else:
                        print("您輸入的次數過多,帳戶已經鎖定,請聯繫管理員解鎖!")
                        users[user][1] = "locked"
                        flag = False
                        break
                    try_num += 1
        else:
            print("對不起,您輸入的用戶名沒有註冊!!!")
            break
    return users

    此函數是登陸功能的核心,用戶信息是以字典形式存儲的{username:[pwd,unlocked,telephone]},首先讓用戶輸入用戶名,並驗證用戶名是否註冊,沒有註冊是不能登陸的;驗證成功以後驗證用戶是否鎖定,鎖定也是不能登陸的(如,咱們去取款機,若是鎖定的話,確定是沒有後續操做的);輸入密碼,密碼輸入以後不會立馬驗證,每一個網站基本上都不會先驗證密碼,而是讓用戶先輸入驗證碼,先進行驗證碼的驗證,驗證碼輸入是沒有次數限制的,驗證碼驗證成功以後,進行密碼驗證,若是密碼輸入成功,則登陸成功;不然會有三次機會,這個是按照銀行系統來的,若是沒有連續輸入三次錯誤,則後續還能在輸入三次,固然沒有銀行那樣時間限制,銀行是隔天才從新回覆三次機會,當天只有三次機會。若是三次都錯誤,則鎖定密碼。鎖定以後就只能解鎖以後才登陸了。

    裏面的新嘗試,循環裏面嵌套pwd = input("請輸入您的密碼:"),之前老是一根筋,如何先輸入密碼,輸入以後先驗證驗證碼,後驗證密碼,如今在驗證密碼的時候,從新在循環裏面添加讓用戶輸入密碼的語句便可。

    5.註冊模塊

def register(status="unlocked"):
    '''
    進行註冊,註冊完成以後寫入文件內部,默認都是沒有鎖定的
    :return: 無返回值,只是註冊以後從新寫入文件庫
    '''
    message = '''
    ---------------------------------------------------------------------------------------------
                               \033[34;1m 歡迎來到註冊平臺,請按照下面提示進行註冊\033[0m
    ---------------------------------------------------------------------------------------------
    '''
    flag = True
    while flag:
        username = input("請輸入你的用戶名:")
        flag = uniqueness_verification(username)
    ''''咱們知道,密碼通常是須要輸入兩次的,兩次一直纔算成功'''
    while True:
        pwd1 = input("請輸入您的密碼:")
        pwd2 = input("請再次輸入密碼:")
        if pwd1 == pwd2:
            break
        else:
            print("兩次輸入的密碼不一致,請從新輸入:")
    while True:
        telephone_num = input("請輸入你的手機號:")
        if len(telephone_num) == 11:
            break
        else:
            print("對不起,您輸入的手機號碼有誤,請從新輸入!!")
    '''都輸入完成以後,要存入到文件中'''
    '''註冊驗證碼都是最後輸入的,輸入只須要正確就能夠,沒有說驗證要在密碼驗證前面'''
    while True:
        random_num = random_code(4)
        print("\033[31m驗證碼:%s\033[0m" %random_num)
        input_num = input("請輸入驗證碼:")
        if random_num.lower() == input_num.lower():    #統一轉化爲小寫,這樣就不用在乎用戶輸入什麼直接能夠驗證
            break
        else:
            print("您輸入的驗證碼有誤,請從新輸入!")
    filename = "users_file"
    users = read_file(filename)   #讀取以前文件中用戶,進行添加
    users[username] = [pwd1,status,telephone_num]   #新增註冊
    print("恭喜你,註冊成功!")
    '''註冊成功以後,寫入文件'''
    write_file(users, filename)   #註冊完成以後,從新寫入文件

     註冊模塊的主題,首先展現註冊模塊的樣式,接着讓用戶輸入用戶名,並進行惟一性驗證,驗證是否用戶名已經被使用;接着輸入密碼兩次,兩次密碼要一致,接着輸入手機號,手機號碼限定長度是11位;而後輸入驗證碼;註冊成功以後,打開文件,而且把新註冊用戶添加進去,從新寫入用戶文件。

    6.惟一性約束

def uniqueness_verification(username):
    '''
    用戶名惟一性驗證,咱們知道,用戶名是不容許重複的,其實手機號也有惟一性約束,可是咱們知道,手機號老是常常改變,
    :param username: 用戶名
    :return: 無返回值
    '''
    flag = False
    filename = "users_file"
    users = read_file(filename)
    if username in users.keys():
        print("對不起,您輸入的用戶名已經註冊,請從新輸入!")
        return True
    else:
        return flag

    上面代碼是實現用戶名惟一性的驗證,咱們知道,註冊的時候要求用戶名是惟一的。

    7.解鎖功能

def unlock(filename):
    '''
    管理員進行解鎖,正常來講只有管理員纔可以解鎖,這樣就只能在添加控制條件了,不過也不要緊,就當聯繫嘗試了
    不過應該超級管理員都是在一個文件單獨存放的,只有聯繫超級管理員纔可以解鎖,須要一些驗證,才能登陸超級管理員
    這裏由於也沒有太好的辦法來交互了,就用戶本身解鎖,經過手機號,這個仍是不少網站經常使用的找回密碼的方法,只要修改了密碼
    就當從新解鎖了,支付寶呀,等在線都是這樣操做的
    :param filename: 文件名
    :return:
    '''
    '''打開文件,讀取用戶信息'''
    users = read_file(filename)
    message = '''\033[36;1m
    --------------------------------------------------------------------------------------------------1】修改密碼                                             【2】找回密碼
    --------------------------------------------------------------------------------------------------
    \033[0m'''
    print(message)
    flag = True    #循環開啓和關閉的標誌
    while flag:

        function_num = input("請選擇您要操做的功能:")
        if not function_num in ['1','2']:
            print("您輸入的功能有誤,請從新輸入!")
            continue
        username = input("請輸入用戶名:")   #判斷用戶名是否存在
        if username in users.keys():
            ''''經過手機號進行修改密碼'''
            while True:
                telephone_num = input("請輸入您的手機號:")
                if telephone_num == users[username][2]:
                    '''驗證碼驗證'''
                    while True:
                        rand_num = random_code(4)
                        print("驗證碼:",rand_num)
                        tem_random_code = input("請輸入驗證碼:")
                        if rand_num.lower() == tem_random_code.lower():
                            break
                        else:
                            print("您輸入的驗證碼有誤,請從新輸入!")
                    break
                else:
                    print("您輸入的手機號有誤,請從新輸入!")
            while True:
                if function_num == '1':
                    pwd1 = input("請輸入你要修改的密碼:")
                    pwd2 = input("請再次輸入您要修改的密碼:")
                    if pwd1 == pwd2:
                        print("密碼修改爲功!")
                        users[username][0] = pwd1
                        users[username][1] = "unlocked"
                        flag = False
                        break
                    else:
                        print("對不起,您兩次輸入的密碼不一致,請從新輸入!")
                        continue
                elif function_num == "2":
                    print("\033[30m您的帳戶密碼是:\033[0m",users[username][0])
                    users[username][1] = 'unlocked'
                    flag = False
                    break
        else:
            print("對不起,您輸入的用戶沒有註冊!!!")
            break
    return users    #解鎖成功以後,返回新的用戶名錶,並重寫寫入到文件中

    上面代碼實現解鎖功能,解鎖裏面有兩種狀況,一種是找回密碼,一種是修改密碼;找回密碼咱們是經過手機號來找回的,讓用戶輸入註冊手機號,並輸入驗證碼,經過後臺把原密碼發送至用戶手機;修改密碼也是經過手機號,固然,用戶登陸成功以後,能夠直接修改用戶密碼,這裏沒有實現;密碼修改以後,要從新寫入用戶文件。修改用戶文件信息都要經過讀和寫兩步。

    驗證碼的驗證:rand_num.lower() == tem_random_code.lower(),咱們經過把驗證碼和用戶名統一轉化爲大寫或者小寫,實現讓用戶不管輸入什麼,都統一進行轉換比較,提高用戶的體驗度。

    8.各主菜單展現模塊

 

def login_show():
    '''登陸展現提醒'''
    show_message = '''
    -----------------------------------------------------------------------------------------------
                               \033[34m  歡迎來到登陸界面,請按一下提示完成登陸
                             若是發現帳號鎖定,請進行驗證解鎖,祝你衝浪愉快[0m
    -----------------------------------------------------------------------------------------------
    '''
    print(show_message)

def register_show():
    '''
    註冊展現頁面,進行提醒
    :return:
    '''
    show_message = '''
    ----------------------------------------------------------------------------------------------------
                                  \033[32;1m   歡迎來到註冊頁面,請按照如下提示完成註冊 \033[0m
    ----------------------------------------------------------------------------------------------------
    '''
    print(show_message)

def unlock_show():
    '''解鎖頁面展現'''
    show_message = '''\033[33;1m
    ----------------------------------------------------------------------------------------------------
                         歡迎來到解鎖頁面,請按照下面提示進行解鎖
                          您能夠選擇找回密碼,或者修改密碼
    ----------------------------------------------------------------------------------------------------
    \033[0m'''
    print(show_message)

 

    上面的代碼,主要是爲了好看,讓界面看起來順眼,一目瞭然,讓用戶知道本身在哪裏,在幹什麼。

    9.程序主體

if __name__ == "__main__":
    main_show()
    flag = True
    while flag:
        choice_num = input("請選擇您要選擇的操做:")
        if choice_num == '1':
            login_show()
            '''判斷用戶文件是否存在'''
            filename = 'users_file'
            test_file(filename)
            users = read_file(filename)
            users_message = log_in(users)
            write_file(users_message,filename)
        elif choice_num == '2':
            register_show()
            register()
        elif choice_num == '3':
            unlock_show()
            '''修改密碼,解除鎖定,咱們知道,如今網絡平臺都是經過手機號本身解鎖的,不過要經過驗證碼充值密碼'''
            filename = 'users_file'
            users = unlock(filename)
            write_file(users,filename)
        elif choice_num == 'q':
            break
        else:
            print("對不起,找不到您輸入編號的功能,請從新輸入")
            continue

    上面代碼就是把上面全部的函數串聯到一塊兒,主體其實很簡單,就判斷用戶選擇的是什麼功能,具體操做都在以前的代碼塊裏面,只須要調用傳入參數便可。

    全部上面函數組合一塊兒:

import os,json,random

def main_show():
    '''進入主頁展現'''
    login_message = '''
-------------------------------------------------------------------------------------------------
                                 您好,歡迎來到京東二貨市場
-------------------------------------------------------------------------------------------------1】登陸              【2】註冊                 【3】解鎖               【q】退出
-------------------------------------------------------------------------------------------------
'''
    print(login_message)

def test_file(file):
    '''
    驗證存儲用戶的文件是否存在,不存在生成
    :param file: 文件名
    :return: 無返回值
    '''
    if os.path.exists(file):
        pass
    else:
        with open(file,"w+") as f:
            users = {}
            json.dump(users,f)

def read_file(file):
    '''
    從用戶文件中讀取用戶列表,以方便進行驗證
    :param file: 文件名
    :return: 返回讀取的用戶列表
    '''
    with open(file,'r+') as fr:
        users = json.load(fr)

    return users

def write_file(users,file):
    '''
    把修改後的用戶列表從新寫入進去
    :param users: 用戶名列表
    :param file:  文件名
    :return: 無返回值
    '''
    with open(file,'w+') as fw:
        json.dump(users,fw)

def random_code(length):
    '''
    隨機驗證碼生成模塊
    :param length: 驗證碼的長度,本身定義多長的驗證碼,開發人員本身定製
    :return: 返回生成的隨機驗證碼
    '''
    codes = []
    for i in range(length):
        num = random.randrange(length)
        if i == num:
            code = random.randint(0,9)
            codes.append(str(code))
        else:
            capital_codes = list(range(65,91))     #小寫字符隨機驗證碼數字
            capital_codes.extend(list(range(97,123)))  #大寫數字隨機驗證碼數字
            tem_code = random.choice(capital_codes)   #random.choice()隨機跳跳出一個元素,由於隨機,不知道跳出那個
            codes.append(chr(tem_code))
    rand_code = "".join(codes)
    return rand_code

def log_in(users):
    '''
    登陸模塊
    :param user: 用戶名
    :param pwd: 密碼
    :param users: 用戶列表{"alex":[123456,"unlocked","15111252591"}
    :return: 無返回值
    '''
    flag = True
    while flag:
        user = input("請輸入您的用戶名:")
        if user in users.keys():
            '''判斷用戶名是否存在,存在以後驗證是否鎖定,若是鎖定告訴要聯繫管理員解鎖'''
            if users[user][1] == 'locked':
                print("對不起,您輸入的密碼已經鎖定,請聯繫管理員解鎖!!!")
                break
            '''咱們知道,咱們登陸網站都是先驗證用戶名存在不存在,若是存在了,就輸入密碼,可是不會先驗證密碼,而是輸入驗證碼
            ,驗證碼輸入以後,驗證驗證碼是否正確,若是驗證碼正確纔會驗證密碼'''
            pwd = input("請輸入您的密碼:")
            '''輸入驗證碼,而且先驗證驗證碼是否正確,驗證碼輸入是沒有限制的,一直到你輸入對位置'''
            while True:
                random_num = random_code(6)    #調用隨機驗證碼生成函數,生成一個6位數的隨機驗證碼
                print("驗證碼:",random_num)
                verification_code = input("請輸入驗證碼:").lower()
                if verification_code == random_num.lower():
                    break
                else:
                    print("驗證碼輸入有誤,請從新輸入:")
                    continue
            '''驗證碼驗證完畢以後,該驗證密碼,密碼和驗證碼不同,密碼是有輸入次數限制的,密碼只能輸入三次'''
            try_num = 0
            while try_num < 3:
                if pwd == users[user][0]:
                    print("登陸成功,歡迎來到京東二手市場!")
                    flag = False
                    break
                else:
                    if try_num != 2:
                        print("您輸入的密碼有誤,你還有%s次鎖定用戶!" %(2-try_num))
                        pwd = input("請輸入您的密碼:")
                    else:
                        print("您輸入的次數過多,帳戶已經鎖定,請聯繫管理員解鎖!")
                        users[user][1] = "locked"
                        flag = False
                        break
                    try_num += 1
        else:
            print("對不起,您輸入的用戶名沒有註冊!!!")
            break
    return users

def register(status="unlocked"):
    '''
    進行註冊,註冊完成以後寫入文件內部,默認都是沒有鎖定的
    :return: 無返回值,只是註冊以後從新寫入文件庫
    '''
    message = '''
    ---------------------------------------------------------------------------------------------
                               \033[34;1m 歡迎來到註冊平臺,請按照下面提示進行註冊\033[0m
    ---------------------------------------------------------------------------------------------
    '''
    flag = True
    while flag:
        username = input("請輸入你的用戶名:")
        flag = uniqueness_verification(username)
    ''''咱們知道,密碼通常是須要輸入兩次的,兩次一直纔算成功'''
    while True:
        pwd1 = input("請輸入您的密碼:")
        pwd2 = input("請再次輸入密碼:")
        if pwd1 == pwd2:
            break
        else:
            print("兩次輸入的密碼不一致,請從新輸入:")
    while True:
        telephone_num = input("請輸入你的手機號:")
        if len(telephone_num) == 11:
            break
        else:
            print("對不起,您輸入的手機號碼有誤,請從新輸入!!")
    '''都輸入完成以後,要存入到文件中'''
    '''註冊驗證碼都是最後輸入的,輸入只須要正確就能夠,沒有說驗證要在密碼驗證前面'''
    while True:
        random_num = random_code(4)
        print("\033[31m驗證碼:%s\033[0m" %random_num)
        input_num = input("請輸入驗證碼:")
        if random_num.lower() == input_num.lower():    #統一轉化爲小寫,這樣就不用在乎用戶輸入什麼直接能夠驗證
            break
        else:
            print("您輸入的驗證碼有誤,請從新輸入!")
    filename = "users_file"
    users = read_file(filename)   #讀取以前文件中用戶,進行添加
    users[username] = [pwd1,status,telephone_num]   #新增註冊
    print("恭喜你,註冊成功!")
    '''註冊成功以後,寫入文件'''
    write_file(users, filename)   #註冊完成以後,從新寫入文件

def uniqueness_verification(username):
    '''
    用戶名惟一性驗證,咱們知道,用戶名是不容許重複的,其實手機號也有惟一性約束,可是咱們知道,手機號老是常常改變,
    :param username: 用戶名
    :return: 無返回值
    '''
    flag = False
    filename = "users_file"
    users = read_file(filename)
    if username in users.keys():
        print("對不起,您輸入的用戶名已經註冊,請從新輸入!")
        return True
    else:
        return flag

def unlock(filename):
    '''
    管理員進行解鎖,正常來講只有管理員纔可以解鎖,這樣就只能在添加控制條件了,不過也不要緊,就當聯繫嘗試了
    不過應該超級管理員都是在一個文件單獨存放的,只有聯繫超級管理員纔可以解鎖,須要一些驗證,才能登陸超級管理員
    這裏由於也沒有太好的辦法來交互了,就用戶本身解鎖,經過手機號,這個仍是不少網站經常使用的找回密碼的方法,只要修改了密碼
    就當從新解鎖了,支付寶呀,等在線都是這樣操做的
    :param filename: 文件名
    :return:
    '''
    '''打開文件,讀取用戶信息'''
    users = read_file(filename)
    message = '''\033[36;1m
    --------------------------------------------------------------------------------------------------1】修改密碼                                             【2】找回密碼
    --------------------------------------------------------------------------------------------------
    \033[0m'''
    print(message)
    flag = True    #循環開啓和關閉的標誌
    while flag:

        function_num = input("請選擇您要操做的功能:")
        if not function_num in ['1','2']:
            print("您輸入的功能有誤,請從新輸入!")
            continue
        username = input("請輸入用戶名:")   #判斷用戶名是否存在
        if username in users.keys():
            ''''經過手機號進行修改密碼'''
            while True:
                telephone_num = input("請輸入您的手機號:")
                if telephone_num == users[username][2]:
                    '''驗證碼驗證'''
                    while True:
                        rand_num = random_code(4)
                        print("驗證碼:",rand_num)
                        tem_random_code = input("請輸入驗證碼:")
                        if rand_num.lower() == tem_random_code.lower():
                            break
                        else:
                            print("您輸入的驗證碼有誤,請從新輸入!")
                    break
                else:
                    print("您輸入的手機號有誤,請從新輸入!")
            while True:
                if function_num == '1':
                    pwd1 = input("請輸入你要修改的密碼:")
                    pwd2 = input("請再次輸入您要修改的密碼:")
                    if pwd1 == pwd2:
                        print("密碼修改爲功!")
                        users[username][0] = pwd1
                        users[username][1] = "unlocked"
                        flag = False
                        break
                    else:
                        print("對不起,您兩次輸入的密碼不一致,請從新輸入!")
                        continue
                elif function_num == "2":
                    print("\033[30m您的帳戶密碼是:\033[0m",users[username][0])
                    users[username][1] = 'unlocked'
                    flag = False
                    break
        else:
            print("對不起,您輸入的用戶沒有註冊!!!")
            break
    return users    #解鎖成功以後,返回新的用戶名錶,並重寫寫入到文件中

def login_show():
    '''登陸展現提醒'''
    show_message = '''
    -----------------------------------------------------------------------------------------------
                               \033[34m  歡迎來到登陸界面,請按一下提示完成登陸
                             若是發現帳號鎖定,請進行驗證解鎖,祝你衝浪愉快[0m
    -----------------------------------------------------------------------------------------------
    '''
    print(show_message)

def register_show():
    '''
    註冊展現頁面,進行提醒
    :return:
    '''
    show_message = '''
    ----------------------------------------------------------------------------------------------------
                                  \033[32;1m   歡迎來到註冊頁面,請按照如下提示完成註冊 \033[0m
    ----------------------------------------------------------------------------------------------------
    '''
    print(show_message)

def unlock_show():
    '''解鎖頁面展現'''
    show_message = '''\033[33;1m
    ----------------------------------------------------------------------------------------------------
                         歡迎來到解鎖頁面,請按照下面提示進行解鎖
                          您能夠選擇找回密碼,或者修改密碼
    ----------------------------------------------------------------------------------------------------
    \033[0m'''
    print(show_message)


if __name__ == "__main__":
    main_show()
    flag = True
    while flag:
        choice_num = input("請選擇您要選擇的操做:")
        if choice_num == '1':
            login_show()
            '''判斷用戶文件是否存在'''
            filename = 'users_file'
            test_file(filename)
            users = read_file(filename)
            users_message = log_in(users)
            write_file(users_message,filename)
        elif choice_num == '2':
            register_show()
            register()
        elif choice_num == '3':
            unlock_show()
            '''修改密碼,解除鎖定,咱們知道,如今網絡平臺都是經過手機號本身解鎖的,不過要經過驗證碼充值密碼'''
            filename = 'users_file'
            users = unlock(filename)
            write_file(users,filename)
        elif choice_num == 'q':
            break
        else:
            print("對不起,找不到您輸入編號的功能,請從新輸入")
            continue

    4、代碼功能展現:

 

     1.主頁面

-------------------------------------------------------------------------------------------------
                                 您好,歡迎來到京東二貨市場
-------------------------------------------------------------------------------------------------
       【1】登陸              【2】註冊                 【3】解鎖               【q】退出
-------------------------------------------------------------------------------------------------

請選擇您要選擇的操做:

    2.登陸
請選擇您要選擇的操做:1

    -----------------------------------------------------------------------------------------------
                                 歡迎來到登陸界面,請按一下提示完成登陸
                             若是發現帳號鎖定,請進行驗證解鎖,祝你衝浪愉快[0m
    -----------------------------------------------------------------------------------------------
    
請輸入您的用戶名:alexsb
對不起,您輸入的用戶名沒有註冊!!!
請選擇您要選擇的操做:1

    -----------------------------------------------------------------------------------------------
                                 歡迎來到登陸界面,請按一下提示完成登陸
                             若是發現帳號鎖定,請進行驗證解鎖,祝你衝浪愉快[0m
    -----------------------------------------------------------------------------------------------
    
請輸入您的用戶名:耿長學
請輸入您的密碼:456789
驗證碼: 3q4QZJ
請輸入驗證碼:3q4qzs
驗證碼輸入有誤,請從新輸入:
驗證碼: YlhBir
請輸入驗證碼:ylhbir
您輸入的密碼有誤,你還有2次鎖定用戶!
請輸入您的密碼:456789
您輸入的密碼有誤,你還有1次鎖定用戶!
請輸入您的密碼:456789
您輸入的次數過多,帳戶已經鎖定,請聯繫管理員解鎖!
請選擇您要選擇的操做:耿長學
對不起,找不到您輸入編號的功能,請從新輸入
請選擇您要選擇的操做:1

    -----------------------------------------------------------------------------------------------
                                 歡迎來到登陸界面,請按一下提示完成登陸
                             若是發現帳號鎖定,請進行驗證解鎖,祝你衝浪愉快[0m
    -----------------------------------------------------------------------------------------------
    
請輸入您的用戶名:耿長學
對不起,您輸入的密碼已經鎖定,請聯繫管理員解鎖!!!

    2.註冊   

-------------------------------------------------------------------------------------------------
                                 您好,歡迎來到京東二貨市場
-------------------------------------------------------------------------------------------------
       【1】登陸              【2】註冊                 【3】解鎖               【q】退出
-------------------------------------------------------------------------------------------------

請選擇您要選擇的操做:2

    ----------------------------------------------------------------------------------------------------
                                     歡迎來到註冊頁面,請按照如下提示完成註冊
    ----------------------------------------------------------------------------------------------------
    
請輸入你的用戶名:耿長學
對不起,您輸入的用戶名已經註冊,請從新輸入!
請輸入你的用戶名:alexsb
請輸入您的密碼:123456
請再次輸入密碼:123456
請輸入你的手機號:151116969251
對不起,您輸入的手機號碼有誤,請從新輸入!!
請輸入你的手機號:15111696938
驗證碼:TC2A
請輸入驗證碼:txas
您輸入的驗證碼有誤,請從新輸入!
驗證碼:7wff
請輸入驗證碼:7wff
恭喜你,註冊成功!

    上面,註冊了的用戶是不能從新註冊的,手機號有驗證,密碼有驗證,而且默認註冊都是未鎖定的,這個函數裏面有默認,用戶是看不到的。

    3.解鎖

    (1)修改密碼

-------------------------------------------------------------------------------------------------
                                 您好,歡迎來到京東二貨市場
-------------------------------------------------------------------------------------------------
       【1】登陸              【2】註冊                 【3】解鎖               【q】退出
-------------------------------------------------------------------------------------------------

請選擇您要選擇的操做:3

    ----------------------------------------------------------------------------------------------------
                         歡迎來到解鎖頁面,請按照下面提示進行解鎖
                          您能夠選擇找回密碼,或者修改密碼
    ----------------------------------------------------------------------------------------------------
    

    --------------------------------------------------------------------------------------------------
              【1】修改密碼                                             【2】找回密碼
    --------------------------------------------------------------------------------------------------
    
請選擇您要操做的功能:1
請輸入用戶名:耿長學
請輸入您的手機號:15111252591
驗證碼: oRxW
請輸入驗證碼:orxw
請輸入你要修改的密碼:123456
請再次輸入您要修改的密碼:123456
密碼修改爲功!

    (2)找回密碼

-------------------------------------------------------------------------------------------------
                                 您好,歡迎來到京東二貨市場
-------------------------------------------------------------------------------------------------
       【1】登陸              【2】註冊                 【3】解鎖               【q】退出
-------------------------------------------------------------------------------------------------

請選擇您要選擇的操做:3

    ----------------------------------------------------------------------------------------------------
                         歡迎來到解鎖頁面,請按照下面提示進行解鎖
                          您能夠選擇找回密碼,或者修改密碼
    ----------------------------------------------------------------------------------------------------
    

    --------------------------------------------------------------------------------------------------
              【1】修改密碼                                             【2】找回密碼
    --------------------------------------------------------------------------------------------------
    
請選擇您要操做的功能:2
請輸入用戶名:user
對不起,您輸入的用戶沒有註冊!!!
請選擇您要選擇的操做:3

    ----------------------------------------------------------------------------------------------------
                         歡迎來到解鎖頁面,請按照下面提示進行解鎖
                          您能夠選擇找回密碼,或者修改密碼
    ----------------------------------------------------------------------------------------------------
    

    --------------------------------------------------------------------------------------------------
              【1】修改密碼                                             【2】找回密碼
    --------------------------------------------------------------------------------------------------
    
請選擇您要操做的功能:2
請輸入用戶名:耿長學
請輸入您的手機號:15111252591
驗證碼: Uess
請輸入驗證碼:uess
您的帳戶密碼是: 123456

    q.退出

    知識總結:

    一、os模塊的使用,os.path.exists(file),學的知識要常常用,要常常寫代碼,只有經過不斷的寫代碼,纔會嘗試用學到的知識,想方法,解決問題;

    二、驗證的前後順序學習,其實先驗證誰都是能夠的,就看循環放在哪裏,誰先進行循環,次序問題,這個要根據具體實際要求;

    三、隨機驗證碼random.choice()使用,列表extend()使用,這些平時都不怎麼經常使用,關鍵的時候會發揮很大的做用;

    四、json文件的讀取和寫入,這個模塊後續我還會單獨測試,要本身在寫代碼的過程當中發現問題,而後去測試,我想測試是否能夠load()不是dump()進去的文件,並熟練使用方法,以前我一直覺得dumps(mess)直接能夠寫到文件中,原來還須要f.write()進行寫入,真他媽的天真,固然經過本身代碼積累,而不是不練習,本身知識在進步中。

相關文章
相關標籤/搜索