import json
import os
import time as t
import hashlib
"""
導入模塊的方式有哪幾種,官方不推薦哪種?
import 包名
import module_a #導入
from module import xx
from module.xx.xx import xx as rename #導入后重命令
from module.xx.xx import * #導入一個模塊下的所有方法,不建議使用
"""
"""
如何讓你寫的模塊可以被系統上任何一個py文件導入
1,放在第三方庫中site-package
from test_import import *
print(sum1(1,2))
"""
"""
寫一個用戶登錄驗證程序,文件名account.json,內容如下
{“expire_date”: “2021-01-01”, “id”: 1234, “status”: 0, “9”: 22, “password”: “abc”}
1,根據用戶輸入的用戶名&密碼,找到對應的json文件,把數據加載出來進行驗證
2,用戶名為json文件名,密碼為 password。
3,判斷是否過期,與expire_date進行對比。
4,登陸成功后,打印“登陸成功”,三次登陸失敗,status值改為1,並且鎖定賬號。
"""
def login():
count = 1
while True:
user_filename = input('請輸入您的用戶名:')
password = input('請輸入您的密碼')
mulu_path = os.path.dirname(__file__) # 當前所在的目錄
file_path = os.path.join(mulu_path, user_filename)
if os.path.isfile(file_path): # 判斷輸入文件所在路徑是否正確
with open(file_path, 'r') as f:
login_dict = json.load(f) # 將文件內容讀取出來
if login_dict['status'] == 0 and count < 4: # 判斷是否被鎖定and登陸次數是否小於3
login_password = login_dict['password'] # 登錄密碼
expire_date_tuple = t.strptime(login_dict['expire_date'], '%Y-%m-%d') # 將過期時間轉為元祖
expire_date_timestamp = t.mktime(expire_date_tuple) # 將過期時間元祖轉為時間戳
now_timestamp = t.time() # 當前時間戳
if login_password == password and now_timestamp < expire_date_timestamp: # 密碼 和 當前時間小於過期時間都成立(登陸成功)
print('登陸成功 ')
break
else:
if count == 3:
print('您的賬戶被鎖定1')
else:
print('密碼錯誤,登錄失敗請重試,您還剩下{}次機會'.format(3 - count))
else:
print('您的賬戶被鎖定2')
with open(file_path, 'w', encoding='utf-8')as f: # 登錄次數超過3次時被鎖定
login_dict['status'] = 1
json.dump(login_dict, f)
break
else:
print('用戶名錯誤,請重新輸入')
count += 1
# login()
"""
寫一個用戶登錄驗證程序,文件名account.json,內容如下
{“expire_date”: “2021-01-01”, “id”: 1234, “status”: 0, “9”: 22, “password”: “abc”}
1,根據用戶輸入的用戶名&密碼,找到對應的json文件,把數據加載出來進行驗證
2,用戶名為json文件名,密碼為 password。
3,判斷是否過期,與expire_date進行對比。
4,登陸成功后,打印“登陸成功”,三次登陸失敗,status值改為1,並且鎖定賬號。
"""
def login_youhua():
count = 1
while count < 4: # 循環 3次
uesrname = input('請輸入你的用戶名:')
password = input('請輸入您的密碼: ')
mulu_path = os.path.dirname(__file__) # 當前目錄路徑
file_path = os.path.join(mulu_path, uesrname) # 拼接成文件的路徑
try: # 放在try中執行
fr = open(file_path, 'r')
dict_file = json.load(fr)
fr.close()
guoqishijian_tuple = t.strptime(dict_file['expire_date'], '%Y-%m-%d') # 時間 元祖
guoqishijian = t.mktime(guoqishijian_tuple) # 過期時間的時間戳
now_time = t.time() # 當前時間的 時間戳
if dict_file['status'] == 0: # 判斷是否狀態為0
if password == dict_file['password']: # 判斷是否登陸成功
if now_time < guoqishijian: # 判斷是否過期
print('登陸成功')
break
else:
print('已過期')
break
else:
if count == 3: # 如果輸入了三次將dict_file['status'] = 1寫入文件
print('賬號已鎖定')
with open(file_path, 'w', encoding='utf-8')as f:
dict_file['status'] = 1
json.dump(dict_file, f)
break
else: # 否則提示密碼錯誤
print('密碼錯誤')
else:
print('已鎖定') # 否則提示已過期退出程序
break
except Exception as e:
print('出錯了{}'.format(e.args))
count += 1 # count放在這里,如果文件名輸入錯誤三次也退出
# login_youhua()
"""
把第3題用戶密碼進行hashlib加密處理。即:json文件里的密碼保存為md5的值,然后用md5的值進行驗證賬號信息是否正確。
"""
def login_youhua_hash():
count = 1
m = hashlib.md5()
while count < 4: # 循環3次
uesrname = input('請輸入你的用戶名:')
password_ming = (input('請輸入您的密碼:'))
m.update(password_ming.encode('utf-8')) # 將輸入的密碼傳入到md5的對象m中
password = m.hexdigest() # 將16進制形式的密碼賦值給password
mulu_path = os.path.dirname(__file__) # 當前目錄路徑
file_path = os.path.join(mulu_path, uesrname) # 拼接成文件的路徑
try: # 放在try中執行
fr = open(file_path, 'r')
dict_file = json.load(fr)
fr.close()
guoqishijian_tuple = t.strptime(dict_file['expire_date'], '%Y-%m-%d') # 時間 元祖
guoqishijian = t.mktime(guoqishijian_tuple) # 過期時間的時間戳
now_time = t.time() # 當前時間的 時間戳
if dict_file['status'] == 0: # 判斷是否狀態為0
if password == dict_file['password']: # 判斷是否登陸成功
if now_time < guoqishijian: # 判斷是否過期
print('登陸成功')
break
else:
print('已過期')
break
else:
if count == 3: # 如果輸入了三次將dict_file['status'] = 1寫入文件
print('賬號已鎖定')
with open(file_path, 'w', encoding='utf-8')as f:
dict_file['status'] = 1
json.dump(dict_file, f)
break
else: # 否則提示密碼錯誤
print('密碼錯誤')
else:
print('已鎖定') # 否則提示已過期退出程序
break
except Exception as e:
print('出錯了{}'.format(e.args))
count += 1 # count放在這里,如果文件名輸入錯誤三次也退出
login_youhua_hash()