pythonは簡単なユーザーパスワードログイン制御を実現する(3回入力するとユーザーをロックする)

13136 ワード

問題の説明
私たちはよくいくつかのウェブサイトにログインしたとき、私たちが何度もパスワードを間違えたら、私たちのアカウントがロックされていることに気づきました.このプロセスはどのように実現されていますか?本プログラムは主に以下の3つの事柄を解決する.ユーザー名パスワード2を入力.認証に成功し、ウェルカムメッセージ3が表示されます.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 = 2
                if user['pwd'] == user_pwd:
                    if user['lock'] == 1:
                        print('you have been locked')
                    else:
                        flag = 1
                        user['cnt'] = 0
                        print("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'] = 1
            new.append(user)
        #          
        with open('data.json', 'w') as f:
            json.dump(new, f)
        if flag == 1:
            break
        if flag == 0:
            print("this user is not exist")

if __name__ == "__main__":
    #         json  
    # utilize()
    login()

いくつかの改善を加える
多くのサイトでは、最近のログイン時間と今回のログイン時間の間隔が24時間より大きい場合は、上記のコードに処理時間の判断を追加し、jsonファイルにtimeフィールドを追加して時間を格納するだけで、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
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).days
    return 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_time
    local_st = utc_st + offset
    return 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 = 2
                last_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'] = 0
                    user['cnt'] = 0
                if user['pwd'] == user_pwd:
                    if user['lock'] == 1:
                        print('you have been locked')
                    else:
                        flag = 1
                        user['cnt'] = 0
                        print("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'] = 1
                user['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:
            break
        if flag == 0:
            print("this user is not exist")


if __name__ == "__main__":
    #         json  
    #utilize()
    login()

転載は出典を明記してください:CSDN:上の階の小さい宇_home:http://blog.csdn.net/u014265347