python--寫一個用戶登錄驗證程序,文件名account.json


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()


免責聲明!

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



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