python之編寫登陸接口(第一天)


作業:編寫登陸接口

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

 

 

針對此實例寫了有二種類型的腳本,略有不同,具體如下:

帳號文件account.txt內容如下:


sam 123 

david 12
kevin 123
lin 12
tailen 123
jack 12


 

鎖文件account_lock.txt默認為空

 

一、只針對帳號文件里的用戶進行判斷並鎖定,針對用戶和密碼各有三次錯誤重試機會。

1、流程圖如下:

代碼如下:

#!/usr/bin/python27
#_*_ coding:utf-8 _*_

import sys,os,getpass


os.system('clear')
i = 0
while i < 3:                                                        #只要用戶登錄異常不超過3次就不斷循環
    name = raw_input("請輸入用戶名:")

    lock_file = open('account_lock.txt','r+')                       #當用戶輸入用戶名后,打開LOCK 文件 以檢查是否此用戶已經LOCK了
    lock_list = lock_file.readlines()

    for lock_line in lock_list:                                     #循環LOCK文件 
        lock_line = lock_line.strip('\n')                           #去掉換行符
        if name == lock_line:                                       #如果LOCK了就直接退出
            sys.exit('用戶 %s 已經被鎖定,退出' % name)  

    user_file = open('account.txt','r')                             #打開帳號文件 
    user_list = user_file.readlines()                               
    for user_line in user_list:                                     #對帳號文件進行遍歷
        (user,password) = user_line.strip('\n').split()             #分別獲取帳號和密碼信息
        if name == user:                                            #如用戶名正常匹配
            j = 0
            while j < 3:                                            #只要用戶密碼異常不超過3次就不斷循環
                passwd = getpass.getpass('請輸入密碼:')              #輸入隱藏密碼
                if passwd == password:                              #密碼正確,提示歡迎登錄
                    print('歡迎登錄管理平台,用戶%s' % name)        
                    sys.exit(0)                                     #正常退出
                else:
if j != 2:                                      #j=2時,是最后一次機會,不用在提示還剩余0次機會了
print('用戶 %s 密碼錯誤,請重新輸入,還有 %d 次機會' % (name,2 - j)) j += 1 #密碼輸入錯誤后,循環值增加1 else: lock_file.write(name + '\n') #密碼輸入三次錯誤后,將該用戶追加到LOCK文件 sys.exit('用戶 %s 達到最大登錄次數,將被鎖定並退出' % name) else: pass #當用戶沒匹配時,跳過並繼續循環 else:
if i != 2:                                                  #i=2時,是最后一次機會,不用在提示還剩余0次機會了
print('用戶 %s 不存在,請重新輸入,還有 %d 次機會' % (name,2 - i)) i += 1 #當用戶輸入錯誤時,循環值增加1 else: sys.exit('用戶 %s 不存在,退出' % name) #用戶輸入三次錯誤后,異常退出 lock_file.close() #關閉LOCK文件 user_file.close() #關閉帳號文件

 

二、針對帳號文件里的不存在的用戶也可以進行判斷並鎖定,針對用戶和密碼共有三次錯誤重試機會

代碼如下:

#_*_ coding:utf-8 _*_

import sys,os,getpass

os.system('clear')

retry_limit = 3
retry_count = 0

account_file = 'account.txt'
lock_file = 'account_lock.txt'

while retry_count < retry_limit:                                         #只要重試不超過3次就不斷循環
    username = raw_input('\033[31;43mUsername:\033[0m')
    username = username.strip()
    lock_check = open(lock_file)                                         #當用戶輸入用戶名后,打開LOCK 文件 以檢查是否此用戶已經LOCK了

    for line in lock_check.readlines():                                  #循環LOCK文件 
        if username == line.strip('\n'):                                  #去掉換行符
            sys.exit('\033[35mUser %s is locked!!!\033[0m' % username)   #如果LOCK了就直接退出
    password = raw_input('\033[32;41mPassword:\033[0m')                  #輸入密碼

    f = open(account_file,'r')                                           #打開帳號文件 
    match_flag = False                                                   # 默認為Flase,如果用戶match 上了,就設置為 True 

    for line in f.readlines():                                           
        user,passwd = line.strip('\n').split()                           #去掉每行多余的\n並把這一行按空格分成兩列,分別賦值為user,passwd兩個變量
        if username == user and password == passwd:                      #判斷用戶名和密碼是否都相等
           print('hello, %s !!' % username)
           match_flag = True                                             #相等就把循環外的match_flag變量改為了True
           break                                                         #然后就不用繼續循環了,直接 跳出,因為已經match上了
    f.close()

    if match_flag == False:                                              #如果match_flag還為False,代表上面的循環中跟本就沒有match上用戶名和密碼,所以需要繼續循環
        print('sorry,%s is unmatched' % username)
        retry_count += 1                                                 #計數器加1
    else:
        print('wlecome login my learning system!')
        break                                                            #用戶成功登錄,退出腳本

else:
    print("you account %s is locked!!!" % username)
    g = open(lock_file,'a')
    g.write(username)                                                    #被鎖用戶追加到用戶鎖文件
    g.write('\n')   
    g.close() 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM