說明任務(wù)點:
1)用戶輸入用戶名帮非,如果沒有氧吐,用戶不能登錄;
2)如果用戶連續(xù)三次登錄密碼之間末盔,用戶會被鎖定一段時間筑舅;
3)在用戶被鎖定一段時間后,可以嘗試再次登錄陨舱;
程序使用庫:
datetime https://docs.python.org/2/library/datetime.html
pymysql http://pymysql.readthedocs.io/en/latest/index.html
數(shù)據(jù)庫設(shè)計如下:
數(shù)據(jù)庫數(shù)據(jù)形式如下
程序說明:
程序結(jié)構(gòu)為順序結(jié)構(gòu)翠拣,未涉及到函數(shù)的調(diào)用之類,只是為了練習(xí)使用pymysql 進行增刪該查的功能
整體思路如下:
(1) 鏈接數(shù)據(jù)庫
#創(chuàng)建數(shù)據(jù)庫的鏈接
connection = pymysql.connect(host='127.0.0.1',
port=3306,
user='root',
password='123456',
db='myschool',
charset='utf8',
cursorclass=pymysql.cursors.DictCursor)
(2) 交互輸入登陸用名名游盲,并根據(jù)輸入查詢數(shù)據(jù)庫數(shù)據(jù)
userName = input("輸入用戶名:")
if "q"!=userName and "Q"!=userName:
with connection.cursor() as cursor:
#根據(jù)用戶名查出用戶信息
sql = 'select * from t_user where name = %s'
result = cursor.execute(sql,userName);
(3) 判斷輸入的用戶名是否存在心剥,如不存在則返回重新輸入,如存在則判斷是否被鎖定背桐,如果被鎖定還得判斷是否已經(jīng)過了鎖定時間
# 判斷是否存在此用戶
if 0==result:
print("無此用戶名存在优烧!")
continue
#獲取用戶信息
item = cursor.fetchone()
is_login = False
# 判斷用戶是否被禁
if item["is_based"]:
last_login_time = item["login_time"]
login_time = datetime.datetime.now()
waiting_time = int(((login_time-last_login_time).total_seconds())/60)
#用戶如果被禁,判斷還需要多長時間等待
if (waiting_time-3)<0:
print("賬號暫時鎖定链峭,請等待%d分鐘"%(3-waiting_time))
break
(4) 連續(xù)輸入三次畦娄,如果密碼輸入錯則被登錄失敗,否則登陸成功
times = 0
# 3次輸入密碼的機會
while times<3:
password = input("請輸入密碼:")
if password != item["password"]:
times += 1
else:
is_login = True
break
# 登錄成功與否,禁用信息以及登錄信息數(shù)據(jù)都在數(shù)據(jù)庫進行更新
if is_login:
is_based = 0
# 將datetime轉(zhuǎn)換字符串類型
login_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print("歡迎%s熙卡,登陸成功杖刷!"%(userName))
else:
is_based = 1
login_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print("登錄失敗,請等待10min")
(4) 更新數(shù)據(jù)庫的信息
# 更新數(shù)據(jù)庫的Mysql語句
sql = "update t_user set is_based = %d , login_time = '%s' where name='%s'"%(is_based,login_time,userName)
cursor.execute(sql)
# 由于對數(shù)據(jù)庫進行了更新驳癌,故需要提交事務(wù)
connection.commit()
全部代碼如下:
import pymysql
import datetime
'''
遇到不懂的問題滑燃?Python學(xué)習(xí)交流群:766545907滿足你的需求,資料都已經(jīng)上傳群文件颓鲜,可以自行下載表窘!
'''
#創(chuàng)建數(shù)據(jù)庫的鏈接
connection = pymysql.connect(host='127.0.0.1',
port=3306,
user='root',
password='123456',
db='myschool',
charset='utf8',
cursorclass=pymysql.cursors.DictCursor)
try:
while True:
userName = input("輸入用戶名:")
if "q"!=userName and "Q"!=userName:
with connection.cursor() as cursor:
#根據(jù)用戶名查出用戶信息
sql = 'select * from t_user where name = %s'
result = cursor.execute(sql,userName);
# 判斷是否存在此用戶
if 0==result:
print("無此用戶名存在!")
continue
#獲取用戶信息
item = cursor.fetchone()
is_login = False
# 判斷用戶是否被禁
if item["is_based"]:
last_login_time = item["login_time"]
login_time = datetime.datetime.now()
waiting_time = int(((login_time-last_login_time).total_seconds())/60)
#用戶如果被禁甜滨,判斷還需要多長時間等待
if (waiting_time-3)<0:
print("賬號暫時鎖定乐严,請等待%d分鐘"%(3-waiting_time))
break
times = 0
# 3次輸入密碼的機會
while times<3:
password = input("請輸入密碼:")
if password != item["password"]:
times += 1
else:
is_login = True
break
# 登錄成功與否,禁用信息以及登錄信息數(shù)據(jù)都在數(shù)據(jù)庫進行更新
if is_login:
is_based = 0
# 將datetime轉(zhuǎn)換字符串類型
login_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print("歡迎%s衣摩,登陸成功昂验!"%(userName))
else:
is_based = 1
login_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print("登錄失敗,請等待10min")
# 更新數(shù)據(jù)庫的Mysql語句
sql = "update t_user set is_based = %d , login_time = '%s' where name='%s'"%(is_based,login_time,userName)
cursor.execute(sql)
# 由于對數(shù)據(jù)庫進行了更新艾扮,故需要提交事務(wù)
connection.commit()
break
else:
print("退出<惹佟!泡嘴!")
break
finally:
# 最終關(guān)閉鏈接
connection.close();