python实现简单的用户密码登录控制(输入三次就锁定用户)
生活随笔
收集整理的這篇文章主要介紹了
python实现简单的用户密码登录控制(输入三次就锁定用户)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
問題描述
我們經常在登錄一些網站的時候,發現我們如果連續的輸錯好幾次密碼,我們的帳號就被鎖定起來了,那這個過程是如何實現的呢?本程序主要就是解決以下3件事情
1.輸入用戶名密碼
2.認證成功并顯示歡迎信息
3.輸錯三次后鎖定
解決辦法
# !/usr/bin/env python
# -*- coding: utf-8 -*-
# Time: 17-11-18 上午8:45
# Author: sty
# File: login_judge.py# 1.輸入用戶名密碼
# 2.認證成功并顯示歡迎信息
# 3.輸錯三次后鎖定
import json# 初始化json文件
def utilize():data = [{'usr': 'sty', 'pwd': '123', 'lock': 0, 'cnt': 0},{'usr': 'bat', 'pwd': 'alibaba', 'lock': 0, 'cnt': 0}]with open('data.json', 'w') as f:json.dump(data, f)# login判斷登錄
def login():with open('data.json', 'r') as f:res = json.load(f)while True:new = []user_name = input('user_name:')user_pwd = input('user_pwd:')flag = 0# flag: 0表示該用戶不存在 1表示用戶存在密碼正確 2表示用戶名存在,但是被鎖定或密碼錯誤for user in res:if user['usr'] == user_name:flag = 2if user['pwd'] == user_pwd:if user['lock'] == 1:print('you have been locked')else:flag = 1user['cnt'] = 0print("welcome to file")else:if user['lock'] == 1:print('you have been locked')else:user['cnt'] = user['cnt'] + 1# 如果user輸入密碼三次 鎖定用戶if user['cnt'] == 3:user['lock'] = 1new.append(user)# 文件中更新帳戶數據with open('data.json', 'w') as f:json.dump(new, f)if flag == 1:breakif flag == 0:print("this user is not exist")if __name__ == "__main__":# 第一次使用初始化json文件# utilize()login()
增加一些改進
貌似很多網站還設置了一個時間記錄,如果最近的一次登錄時間和此次登錄時間的間隔大于24小時了,你將繼續獲得三次登錄機會,這個我們僅需要在上述的代碼中添加一個處理時間的判斷和相應的在json文件中添加time字段用來存儲時間。需要注意的是在文件中使用到了一個格林威治時間與本地時間的裝換。
# !/usr/bin/env python
# -*- coding: utf-8 -*-
# Time: 17-11-18 上午8:45
# Author: sty
# File: login_judge.py# 1.輸入用戶名密碼
# 2.認證成功并顯示歡迎信息
# 3.輸錯三次后鎖定
import json
import time
from datetime import datetime# 初始化json文件
def utilize():data = [{'usr': 'sty', 'pwd': '123', 'lock': 0, 'cnt': 0, 'time': '2017-01-01 0:0:0'},{'usr': 'bat', 'pwd': 'alibaba', 'lock': 0, 'cnt': 0, 'time': '2017-01-01 0:0:0'}]with open('data.json', 'w') as f:json.dump(data, f)#判斷間隔時間
def time_judge(start_time, end_time):day = (end_time - start_time).daysreturn day# UTC時間轉本地時間(+8:00)
def utc2local(utc_st):now_stamp = time.time()local_time = datetime.fromtimestamp(now_stamp)utc_time = datetime.utcfromtimestamp(now_stamp)offset = local_time - utc_timelocal_st = utc_st + offsetreturn local_st# 本地時間轉UTC時間(-8:00)
def local2utc(local_st):time_struct = time.mktime(local_st.timetuple())utc_st = datetime.utcfromtimestamp(time_struct)return utc_st# login判斷登錄
def login():with open('data.json', 'r') as f:res = json.load(f)while True:new = []user_name = input('user_name:')user_pwd = input('user_pwd:')flag = 0# flag: 0表示該用戶不存在 1表示用戶存在密碼正確 2表示用戶名存在,但是被鎖定或密碼錯誤for user in res:if user['usr'] == user_name:flag = 2last_time = datetime.strptime(user['time'],"%Y-%m-%d %H:%M:%S")now_time = utc2local(datetime.utcnow())# 判斷時間間隔if time_judge(last_time, now_time) > 1:user['lock'] = 0user['cnt'] = 0if user['pwd'] == user_pwd:if user['lock'] == 1:print('you have been locked')else:flag = 1user['cnt'] = 0print("welcome to file")else:if user['lock'] == 1:print('you have been locked')else:user['cnt'] = user['cnt'] + 1# 如果user輸入密碼三次 鎖定用戶if user['cnt'] == 3:user['lock'] = 1user['time'] = now_time.strftime("%Y-%m-%d %H:%M:%S") #更新登錄時間new.append(user)# 文件中更新帳戶數據#print(new)with open('data.json', 'w') as f:json.dump(new, f)if flag == 1:breakif flag == 0:print("this user is not exist")if __name__ == "__main__":# 第一次使用初始化json文件#utilize()login()
轉載請注明出處:
CSDN:樓上小宇_home:http://blog.csdn.net/sty945
總結
以上是生活随笔為你收集整理的python实现简单的用户密码登录控制(输入三次就锁定用户)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 部分数据可视化结果
- 下一篇: 1 用python进行OpenCV实战之