目錄
    想法:
首頁 後端開發 Python教學 撰寫登入視窗的具體步驟詳解

撰寫登入視窗的具體步驟詳解

Jun 20, 2017 pm 01:47 PM
登入 視窗 編寫

    想法:

    1、參考模型,此作業我參考了linux的登入認證流程以及結合網路銀行支付寶等鎖定規則;

# 1)認證流程參考的是Linux的登入:當你輸入完使用者名稱密碼後再驗證使用者名稱是否有使用者是否被鎖定,然後在驗證密碼是否正確,如果驗證不過去只會告訴你驗證失敗,而不告訴你到底是使用者名稱錯誤還是密碼錯誤,增加了暴力破解的難度;

      2)關於輸入錯誤次數的計數和鎖定,我參考的是銀行和支付寶的做法,也就是只關心你輸錯了多少次,不關心輸對了多少次,也就是說輸錯了兩次,第三次輸了,前面的數不清零,也就是你今天輸入了1000次輸對了997次,只輸錯了3次,那對不起,依然要鎖定。而且輸入錯誤的3次不一定要連續。只要三次輸入錯誤三次就鎖定。

    2、關於計數和狀態的保存我考慮還是透過檔案來持久化保存,每次輸入錯誤次數的累加和鎖定都保存到文件中,這樣雖然增加了文件的操作,但是保證了程序的可靠性,這樣程序退出,計數仍然有效。文件類型如下:

    alex sb lock 3
  tom 666 unlock 0
  geng 888 unlock 2

  是用戶名,第二列是密碼,第三列是使用者狀態(lock代表鎖定,unlock代表沒有鎖定),第四列是登入次數(其實,登入次數只要錯誤的時候登入次數加一即可,沒有錯誤的時候不用管它)。

程式碼如下:

           with open(filename,)           key,values                           lines =                print(             f.write( .join(lines) +                           values.insert(             f.write( .join(values) +   # messages = {:[,,],:[,,],:[,, # write_file(messages,   __name__ ==      active =               username = input(         users_dict = {}     #用户字典,用于存放用户的信息,键-用户名,值-         with open(,)              lines =              line                  user_list =                 users_dict[user_list[]] = user_list[           username               users_dict[username][] ==                  print(                                (users_dict[username][]) <                      user_pwd = input(                      users_dict[username][] ==                         print(                                               (users_dict[username][]) !=                              print( % ( - (users_dict[username][                         users_dict[username][] = (users_dict[username][]) +                                        print(                     users_dict[username][] =                      users_dict[username][] =                      write_file(users_dict,         elif username ==                         print()
运行结果如下:
请输入你的用户名(输入quit退出):tom
请输入密码:22
还有2次机会,用户将被锁定!
请输入密码:22
还有1次机会,用户将被锁定!
请输入密码:22
对不起,您输入的次数过多,你的用户名已经被锁定,请联系管理员!
请输入你的用户名(输入quit退出):alex
您输入的用户名已经锁定,请联系管理员!
登入後複製

    其實對文件的操作,其本質上還是對字串列表,字典的操作,文件的操作,讀取文件的方法,readlines()按行讀取存放到一個列表中,使用dict(字典)記錄用戶資訊。字串的拼接(join)方法,(" ".join(list)),字串與列表進行拼接,形成一個新的字串,其實字串的本質上在python中儲存的形式就是以列表的形式存儲,列表之間的拼接,list.extend(list),列表之間的拼接。

     程式碼說明:

#    1、這裡用了兩個今天課程沒講的內容:字典和函數,使用者資訊以字典的方式保存是出於判斷用戶名是否存在的考慮,讀文件的時候直接將用戶名作為字典的一個key,其他的信息作為字典的value與key一一對應,這樣在判斷用戶名是否存在只需要透過in這個成員運算子來判斷就可以了;

    2、程式碼的第61、62兩行程式碼完成的就是將檔案變成字典的過程。

     原創張曉宇程式碼實例:

#!/usr/bin/env python3
# coding:utf-8'''Created on: 2015年12月29日

@author: 张晓宇

Email: 61411916@qq.com

Version: 1.0Description: 输入用户名密码,认证成功显示欢迎信息,认证失败,输错三次后锁定

Help:'''import os
# 定义用户信息写入函数,用于把用户信息写回文件
def write_to_account_file(accounts,account_file_path):"""accounts是一个用户信息字典,目的是把变更过的信息写入文件中"""account_file = open(account_file_path,"w")for key,val in accounts.items():
        line = []
        line.append(key)
        line.extend(val)
        print(" ".join(line))      #字符串与列表拼接,目的是实现列表中每个元素加空格生成一个字符串如a b c d格式
        account_file.write(" ".join(line) + "\n")    #往文件中添加信息
    account_file.close()   #直接打开文件的时候一定要记得关闭文件,以免文件休息丢失if __name__ == '__main__':'''    @parameters:
        account_file_path:账户文件
        password_col_num:账户文件中密码所在的列(从0开始)
        status_col_num:账户文件中账户状态所在的列(从0开始)
        error_count_num:账户文件中输入错误次数所在的列(从0开始)
        app_info:系统信息,用户启动应用后的输出
        welcome_msg:用户成功登录后的信息'''    account_file_path = 'account.db'password_col_num = 1status_col_num = 2error_count_num = 3app_info = '''    +---------------------------------+
    | Welcome to gcx system           |
    | Version:2.0                     |
    | Author:zhuzhu                   |
    +---------------------------------+'''    welcome_msg = "Welcome %s,authentication is successful!"if os.path.exists(account_file_path):    #os.path.exists()判断文件是否存在,返回布尔值
    # 判断账户文件是否存在
        account_file = open(account_file_path,"r")else:
        #文件不存在,看系统是否有误
        print("Error:Account file 'account.db' is not exit,please check!")
        exit(1)

    #读账户文件
    accounts = {}for line in account_file.readlines():   #按行读取文件
        account = line.strip().split()      #清楚空格后进行分列,生成一个列表
        accounts[account[0]] = account[1:]"""把列表中的第一个元素(用户名)当做键,用户的其他信息当做值,组成键值对存放在字典中""""""account[0]键,account[1:]是值"""account_file.close()    #关闭文件
    flag = Truewhile flag:
        print(app_info)
        #输入用户名
        username = input("Username(Enter quit to exit): ").strip()
        #判断用户是否输入的为quitif username == "quit":
            #是则退出循环,程序结束breakpassword = input("Password: ").strip()
        #判断用户名是否存在if username not in accounts.keys():
            #不存在提示错误信息并退出当前循环让用户重新输入
            print("Error:Username or Password it is error!")continue     #结束本次循环,让用户再次输入用户名和密码,继续执行下一次循环if accounts[username][status_col_num - 1] == "lock":
            #如果被锁定退出当前循环让用户重新输入
            print("Error:Account is locked.Please contact the administrator!")continue    #跳过本次循环,让用户重新输入进行验证,这个可以避免很多缩进,能够继续执行下一次
        #判断用户密码是否正确if password == accounts[username][password_col_num - 1]:
            #正确显示欢迎信息
            print(welcome_msg %username)breakelse:
            #用户密码不正确的情况
            #提示用户名或密码错误
            print("Error:Username or Password it is error!")
            #输入错误次数加1
            accounts[username][error_count_num - 1] = str(int(accounts[username][error_count_num - 1]) + 1)
            #判断是否已经达3次if int(accounts[username][error_count_num - 1 ]) == 3:
                #如果输入错误达到3次
                #提示账户将被锁定
                print("Error: This account will be locked,Please contact the administrator!System will be exit!")
                #将用户状态改为lock并写入文件
                accounts[username][status_col_num - 1] == "lock"write_to_account_file(accounts,account_file_path)breakwrite_to_account_file(accounts,account_file_path)
登入後複製
#

    上述程式碼中亮點:

    (1)continue:結束這次循環,continue後面的程式碼都不執行,達到重新讓使用者輸入的目的,很多網頁都是讓使用者一直輸入,知道使用者要麼選擇註冊,要麼關掉網頁;

   (2)文件的規範性較好,並有解釋;

#    (3)文件就是一行一行讀,然後一行一行寫入文件,修改的過程中要用到列表和字典的知識;

  (4) " ".join(list)字串與列表的拼接,產生新的字串;

   (5)split()字串的分割;extend()列表之間的拼接。

以上是撰寫登入視窗的具體步驟詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

小紅書怎麼登入以前的帳號?它換綁後原來號碼遺失了怎麼辦? 小紅書怎麼登入以前的帳號?它換綁後原來號碼遺失了怎麼辦? Mar 21, 2024 pm 09:41 PM

隨著社群媒體的快速發展,小紅書成為許多年輕人分享生活、探索新產品的熱門平台。在使用過程中,有時使用者可能會遇到登入先前帳號的困難。本文將詳細探討如何解決小紅書登入舊帳號的問題,以及如何應對更換綁定後可能遺失原帳號的情況。一、小紅書怎麼登入以前的帳號? 1.找回密碼登入如果長時間未登入小紅書,可能導致帳號被系統回收。為了恢復存取權限,你可以嘗試透過找回密碼的方式重新登入帳號。操作步驟如下:(1)開啟小紅書App或官網,點選「登入」按鈕。 (2)選擇「找回密碼」。 (3)輸入你註冊帳號時所使用的手機號碼

wallpaperengine登入別的號碼後下載別人的桌布怎麼辦 wallpaperengine登入別的號碼後下載別人的桌布怎麼辦 Mar 19, 2024 pm 02:00 PM

當你在自己電腦上登過別人steam帳號之後,剛好這個別人的帳號也有wallpaper軟體,切換回自己帳號之後steam就會自動下載別人帳號訂閱的桌布,使用者可以透過關閉steam雲端同步解決。 wallpaperengine登入別的號碼後下載別人的桌布怎麼辦1、登陸你自己的steam帳號,在設定裡面找到雲端同步,關閉steam雲端同步。 2.登陸你之前登陸的別人的steam帳號,打開wallpaper創意工坊,找到訂閱內容,然後取消全部訂閱。 (以後防止找不到壁紙,可以先收藏再取消訂閱)3、切換回自己的stea

《陰陽師》茨木童子典藏皮膚登入即領,禪心雲外鏡新造型即將上線! 《陰陽師》茨木童子典藏皮膚登入即領,禪心雲外鏡新造型即將上線! Jan 05, 2024 am 10:42 AM

山野間萬鬼嘶鳴,隱沒兵刃交接之聲,越嶺奔赴而來的鬼將,心中戰意洶湧,以炎火為號,率百鬼衝鋒迎戰。 【熾焱百煉•茨木童子典藏皮膚上線】鬼角熾焰怒燃,鎏金眼眸迸發桀駿戰意,白玉甲片裝飾戰袍,彰顯大妖不羈狂放的氣勢。雪白飄揚的袖擺上,赤焰攀附交織,金紋烙印其中,燃點一片緋艷妖異色彩。妖力凝聚而成的鬼火咆哮而至,烈焰令群巒為之震動,煉獄間歸來的妖鬼啊,一同懲戒進犯之人吧。 【專屬動態頭像框•熾焱百煉】【專屬插畫•焰火將魂】【傳記鑑賞】【獲取方式】茨木童子典藏皮膚·熾焱百煉將於12月28日維護後上架皮膚商店,

Discuz後台登入問題解決方法大揭秘 Discuz後台登入問題解決方法大揭秘 Mar 03, 2024 am 08:57 AM

Discuz後台登入問題解決方法大揭秘,需要具體程式碼範例隨著網路的快速發展,網站建置變得越來越普遍,而Discuz作為一款常用的論壇建站系統,受到了許多站長的青睞。然而,正是因為其功能強大,有時候我們在使用Discuz的過程中會遇到一些問題,例如後台登入問題。今天,我們就來大揭秘Discuz後台登入問題的解決方法,並且提供具體的程式碼範例,希望能幫助到有需要

谷歌瀏覽器怎麼設定每次開啟都是新的窗口 谷歌瀏覽器怎麼設定每次開啟都是新的窗口 Mar 06, 2024 pm 06:19 PM

谷歌瀏覽器怎麼設定每次開啟都是新的視窗?狠毒用戶喜歡使用谷歌瀏覽器辦公或學習,這款瀏覽器具有安全、快速、便捷的特點,不同的用戶使用瀏覽器的喜好不同,一些用戶喜歡打開谷歌瀏覽器就是新的標窗口,方便快速搜索,那麼如何設定呢。接下來小編就帶給大家谷歌瀏覽器每次開啟都是新的視窗設定教程,有興趣的朋友來學習一下。谷歌瀏覽器每次開啟都是新的視窗設定教學1、將電腦桌面上的Google瀏覽器雙擊開啟之後,點選右上角的【三個點】的圖示位置進行點擊。 2.找到【設定】這個選項進入到頁面中(如圖)。 3.進入到谷歌瀏

快手電腦版怎麼登入-快手電腦版的登入方法 快手電腦版怎麼登入-快手電腦版的登入方法 Mar 04, 2024 pm 03:30 PM

近日有一些小夥伴諮詢小編快手電腦版怎麼登入?下面就為大家帶來了快手電腦版的登入方法,有需要的小夥伴可以來了解了解哦。第一步:先在電腦的瀏覽器上百度搜尋快手官網。第二步:在搜尋結果清單裡面選取第一條。第三步:進入快手官網主頁面後,點選影片的選項。第四步:點選右上角的使用者頭像。步驟五:在彈出的登入選單裡面點選二維碼登入。步驟六:之後打開手機上的快手,點選左上角的圖示。第七步:點選二維碼標誌。第八步:在我的二維碼介面點擊右上角的掃描圖示之後,掃描電腦上的二維碼即可。第九步:最後電腦版的快手就登入成

夸克怎麼登入兩個設備 夸克怎麼登入兩個設備 Feb 23, 2024 pm 10:55 PM

夸克怎麼登入兩個設備?夸克瀏覽器是支援同時登陸兩個設備的,但是多數的小夥伴不知道夸克瀏覽器如何登陸兩個設備,接下來就是小編為用戶帶來的夸克登陸兩個設備方法圖文教程,有興趣的用戶快來一起看看吧!夸克瀏覽器使用教學夸克怎麼登入兩個裝置1、先開啟夸克瀏覽器APP,主頁點選【夸克網盤】;2、接著進入夸克網盤介面,選擇【我的備份】服務功能;3、最後選擇其中的【切換設備】即可更換新設備登陸兩個。

百度網盤網頁版怎麼進?百度網盤網頁版登入入口 百度網盤網頁版怎麼進?百度網盤網頁版登入入口 Mar 13, 2024 pm 04:58 PM

  百度網盤不僅能儲存各種軟體資源,還能分享給別人,支援多端同步,如果你的電腦沒有下載客戶端,可以選擇進入網頁版使用。那麼百度網盤網頁版要怎麼登入呢?下面就來看看詳細介紹。  百度網盤網頁版登入入口:https://pan.baidu.com(複製連結至瀏覽器開啟)  軟體介紹  1、分享  提供文件分享功能,使用者將文件整理,分享給需要的小夥伴。  2、雲端  不佔用太多內存,大多數檔案都保存在雲端,有效節省電腦空間。  3、相簿  支援雲相簿功能,將照片匯入到雲盤中,然後整理,方便大家查看。  

See all articles