Heim > Backend-Entwicklung > Python-Tutorial > Login-Schnittstelle

Login-Schnittstelle

巴扎黑
Freigeben: 2017-06-23 14:52:34
Original
1461 Leute haben es durchsucht

Aufgabe 1: Login-Schnittstelle schreiben

1. Benutzername und Passwort eingeben

2. Anzeige der Willkommensnachricht nach erfolgreicher Authentifizierung

3. Sperre nach drei falschen Eingaben

Idee:

(1) Der Benutzer gibt den Benutzernamen ein.

(2) Gehen Sie zur Sperrdatei, um zu überprüfen, ob der Benutzername vorhanden ist ist gesperrt;

  (3) Gehen Sie zum aktuellen Benutzer, um zu überprüfen, ob der Benutzer existiert

  (4) Der Benutzer gibt das Passwort ein und wird nach drei falschen Eingaben gesperrt

(5) Nach dem Sperren den Benutzernamen aus der aktuellen Datei löschen und zur gesperrten Datei hinzufügen.

Achten Sie auf die Lese-, Änderungs- und Schreibvorgänge von Dateien. Diese Vorgänge müssen mithilfe von Listen ausgeführt werden, da sonst einige unnötige Fehler auftreten. Definieren Sie abschließend eine Funktion Rufen Sie für diese Vorgänge einfach diese Funktionen auf, wenn Sie sie verwenden.

Beim Betrieb von Listendateien müssen Sie auf die Verarbeitung von Zeilenumbrüchen und das Hinzufügen von Elementen achten. Diese Methoden eignen sich am besten für die Verwendung von Listen und Wörterbüchern zum Lesen und Schreiben von Dateien um das Format ordentlich zu halten.

Der Code lautet wie folgt:

import os,sys,getpass,collections
retry_limit = 3   #密码错误三次被锁定
retry_count = 0   #起始次数是0次

def locked_user(users,filename):
    #用于存放锁定用户的文件,当用户锁定的时候,要从原文件删除,添加到新的文件中
    with open(filename,"w+") as locked_f:for key,value in users.items():
            line = []
            line.append(key)
            line.append(value)
            file_line = " ".join(line) + "\n"locked_f.write(file_line)

active = Trueif __name__ == "__main__":while True:
        username = input("请输入用户名(输入quit退出):")
        with open("account_lock.txt","r") as f:
            user_lists = f.readlines()for user_list in user_lists:if user_list.strip() == username:
                    print("您好,你的用户已经被锁定,请联系管理员!")continue    #如果用户锁定,结束当前循环,执行下一次用户输入else:
                    passif username == "quit":
            sys.exit(0)

        with open("account.txt") as active_f:
            users_dict = collections.OrderedDict()for line in active_f:
                user,pwd = line.strip().split()
                users_dict[user] = pwdif username in users_dict.keys():while retry_count < retry_limit:
                passwd = getpass.getpass("请输入你的密码:")  # 隐藏式输入密码
                # 判断用户是否在用户列表中if users_dict[username] == passwd:
                    print("欢迎回来,认证成功!")breakelse:if retry_count != 2:
                        #提示用户注意,还有几次机会将被锁定
                        print("您输入的密码不对,您还有%d次机会,否则系统将被锁定!" % (2 - retry_count))
                    retry_count += 1else:
                print("您输入的次数过多,%s已被锁定,请联系管理员" %username)

                #用户锁定之后,要把锁定的用户从当前文件删除,移到锁定文件中
                users_dict.pop(username)
                locked_user(users_dict,"account.txt")
                with open("account_lock.txt","a+") as a_f:
                    a_f.write(username + "\n")else:
            print("对不起,您输入的用户不存在,请重新输入!!!")
Nach dem Login kopieren

Der obige Code Die Funktion der Anmeldeschnittstelle ist implementiert, weist jedoch einige kleine Mängel auf, dh das Schreiben der gesperrten Datei ist nicht sehr gut und es werden nur zwei Leerzeilen in der vorherigen Datei angezeigt kann geschrieben und gelesen und in eine Datei eingefügt werden. Fügen Sie dann den gesperrten Benutzer zur Liste hinzu und lesen Sie die Datei erneut. Der Code wird unten korrigiert.

         with open(filename,)           key,value              line =               file_line =  .join(line) +    active =  __name__ ==               retry_limit =          retry_count =          username = input(         with open(,)              user_lists =              user_list                   user_list.strip() ==                     print(                                                 username ==              sys.exit(          with open()              users_dict =              line                  user,pwd =                 users_dict[user] =           username               retry_count <                 passwd = input(                   users_dict[username] ==                     print(                                                            retry_count !=                           print( % ( -                     retry_count +=                                print( %                    locked_user(users_dict,                 with open(,)                       user_lines =                     user_messages =                      user_line                     with open(,)                        user_message                          user_message = user_message +                         print()
运行如下:
请输入用户名(输入quit退出):zeng
请输入你的密码:222
您输入的密码不对,您还有2次机会,否则系统将被锁定!
请输入你的密码:222
您输入的密码不对,您还有1次机会,否则系统将被锁定!
请输入你的密码:222
您输入的次数过多,zeng已被锁定,请联系管理员
['chang', 'geng', 'xue', 'zeng']
请输入用户名(输入quit退出):zhu
请输入你的密码:333
您输入的密码不对,您还有2次机会,否则系统将被锁定!
请输入你的密码:333
您输入的密码不对,您还有1次机会,否则系统将被锁定!
请输入你的密码:333
您输入的次数过多,zhu已被锁定,请联系管理员
['chang', 'geng', 'xue', 'zeng', 'zhu']
请输入用户名(输入quit退出):quit
Nach dem Login kopieren

Im Code durchlaufen wir beim Schreiben der Datei einen Konvertierungsschritt, wie in der Abbildung unten dargestellt:

Der oben beschriebene Prozess der Dateikonvertierung ist eine häufig verwendete Form der Dateiverarbeitung. Beachten Sie jedoch, dass bei der Verwendung von „w“ zum Lesen von Dateien besonderes Augenmerk darauf gelegt werden muss Vernichten Sie den ursprünglichen Dateiinhalt, gehen Sie vorsichtig damit um und beschädigen Sie nicht versehentlich die Dateibibliothek des Unternehmens, sonst wird Ihr Chef Sie überholen.

Das obige ist der detaillierte Inhalt vonLogin-Schnittstelle. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage