1. 程式人生 > >連續三次登陸失敗鎖定賬戶

連續三次登陸失敗鎖定賬戶

管理員 post 退出 getpass 信息 循環讀取 serve 驗證 pre

連續三次登錄失敗鎖定賬戶

需求說明:
1、輸入用戶名
2、認證成功,提示登錄成功,歡迎信息
3、登錄失敗連續三次,提示失敗,並退出程序

備註:
1、users_info是存放用戶名及其密碼的文件,格式: 用戶名 密碼, 之間用空格隔開
2、locked_file是存放被鎖定的用戶id的文件,默認為空,格式為: 用戶名
3、程序會對users_info裏的合法用戶id進行判斷,若連續三次輸入錯誤,提示失敗並退出
4、程序會對正確的用戶名後的密碼進行驗證,輸入三次密碼錯誤,鎖定該用戶名,並退出

思路導圖:

技術分享圖片



一、代碼如下
技術分享圖片
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
#
Author: davie # file three_login.py """ 需求說明: 1、輸入用戶名 2、認證成功,提示登錄成功,歡迎信息 3、登錄失敗連續三次,提示失敗,並退出程序 備註: 1、users_info是存放用戶名及其密碼的文件,格式: 用戶名 密碼, 之間用空格隔開 2、locked_file是存放被鎖定的用戶id的文件,默認為空,格式為: 用戶名 3、程序會對users_info裏的合法用戶id進行判斷,若連續三次輸入錯誤,提示失敗並退出 4、程序會對正確的用戶名後的密碼進行驗證,輸入三次密碼錯誤,鎖定該用戶名,並退出 """ import os,sys,getpass #
導入os,sys,getpass 模塊 os.system(clear) # 清屏操作 count = 0 # 用戶輸入循環次數 while count < 3: # 只要用戶登錄失敗不超過3次,就就行循環執行 username = input("請輸入您的用戶名: ").strip() # 輸入用戶名 # 打開locked_file文件,權限是讀寫,並賦值給locked_f變量 locked_f = open(locked_file,mode=r+,encoding=utf-8) #
使用.readlines()的方法逐行讀取locked_file文件,並賦值給locked_list變量 locked_list = locked_f.readlines() # 使用for循環讀取locked_file的內容 for locked_line in locked_list: # 使用.strip()的方法去掉換行符 locked_line = locked_line.strip(\n) # 判斷用戶輸入的信息是否在locked_file中存在 if username == locked_line: print("用戶:\033[31m%s\033[0m 已經鎖定,請聯系您的管理員" % username) # 如果存在則打印 sys.exit(1) # sys模塊的exit()方法表示退出 with open("users_info",mode="r",encoding="utf-8") as user_f: # 只讀模式打開文件 user_list = user_f.readlines() # 使用.readlines()方法逐行讀取,賦值給變量 for user_line in user_list: # 使用for循環讀取users_info的內容 (user,passwd) = user_line.strip(\n).split() # 分別獲取賬號和密碼信息 if username == user: # 使用if判斷用戶輸入的賬號是否在users_info中存在 p_count = 0 # 輸入密碼的循環次數 while p_count <3: # 循環不超過三次 password = getpass.getpass("請輸入密碼: ") # 使用getpass方法,密碼不顯示 if password == passwd: # 用戶名和密碼都正確 print("\033[36m歡迎您,登陸成功!\033[0m") sys.exit(0) else: if p_count != 2: # p=2時,是最後一次機會 print("對不起,\033[31m%s\033[0m的密碼錯誤,請繼續輸入,你還有\033[31m%d\033[0m次機會"%(username,2-p_count)) p_count += 1 else: pass # 用戶匹配失敗,跳過並繼續循環 else: locked_f.write(username + \n) sys.exit("對不起 \033[31m%s 用戶已經被鎖定,請聯系管理員\033[0m"% username) u += 1 else: sys.exit("\033[31輸入有誤,程序退出,請重新輸入!\033[0m") locked_f.close() # 關閉文件
View Code

二、運行結果

技術分享圖片
[davie@webserver ~]$ ll
total 8
-rw-rw-r-- 1 davie davie    0 Mar 23 20:54 locked_file
-rw-rw-r-- 1 davie davie 3312 Mar 23 20:53 three_login.py
-rw-rw-r-- 1 davie davie   30 Mar 23 20:24 users_info
[davie@webserver ~]$ cat users_info 
u1 123456
u4 123456
u5 123456
[davie@webserver ~]$ python3 three_login.py 
請輸入您的用戶名: u1
請輸入密碼: 
對不起,u1的密碼錯誤,請繼續輸入,你還有2次機會
請輸入密碼: 
對不起,u1的密碼錯誤,請繼續輸入,你還有1次機會
請輸入密碼: 
對不起 u1 用戶已經被鎖定,請聯系管理員
[davie@webserver ~]$ 
[davie@webserver ~]$ cat locked_file 
u1
[davie@webserver ~]$ 
[davie@webserver ~]$ python3 three_login.py 
請輸入您的用戶名: u2
對不起 u2 用戶已經被鎖定,請聯系管理員
[davie@webserver ~]$ ll
total 12
-rw-rw-r-- 1 davie davie    6 Mar 23 21:42 locked_file
-rw-rw-r-- 1 davie davie 3312 Mar 23 20:53 three_login.py
-rw-rw-r-- 1 davie davie   30 Mar 23 20:24 users_info
[davie@webserver ~]$ cat locked_file 
u1
u2
[davie@webserver ~]$ python3 three_login.py 
請輸入您的用戶名: u3
對不起 u3 用戶已經被鎖定,請聯系管理員
[davie@webserver ~]$ python3 three_login.py 
請輸入您的用戶名: u4
請輸入密碼: 
歡迎您,登陸成功!
[davie@webserver ~]$ 
View Code



連續三次登陸失敗鎖定賬戶