Maison  >  Article  >  développement back-end  >  Interface de connexion

Interface de connexion

巴扎黑
巴扎黑original
2017-06-23 14:52:341445parcourir

Devoir 1 : Écrire l'interface de connexion

1. Saisissez le nom d'utilisateur et le mot de passe

2. Afficher le message de bienvenue après une authentification réussie

3. Verrouiller après trois entrées incorrectes

Idée :

(1) L'utilisateur saisit le nom d'utilisateur

(2) Accédez au fichier de verrouillage pour vérifier si le nom d'utilisateur ; est verrouillé ;

  (3) Accédez à l'utilisateur actuel pour vérifier si l'utilisateur existe

  (4) L'utilisateur saisit le mot de passe ; et est verrouillé après trois entrées incorrectes

(5) Après le verrouillage, supprimez le nom d'utilisateur du fichier actuel et ajoutez-le au fichier verrouillé.

Faites attention aux opérations de lecture, de modification et d'écriture des fichiers. Ces opérations doivent être effectuées à l'aide de listes, sinon cela provoquera des erreurs inutiles. Enfin, définissez une fonction à compléter. Pour ces opérations, appelez simplement ces fonctions lorsque vous les utilisez.

Lorsque vous utilisez des fichiers de liste, vous devez faire attention au traitement des sauts de ligne et à la façon d'ajouter des éléments. Ces méthodes sont préférables pour utiliser des listes et des dictionnaires pour lire et écrire des fichiers, de manière à ce que ces méthodes soient efficaces. pour garder le format soigné.

Le code est le suivant :

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("对不起,您输入的用户不存在,请重新输入!!!")

Le code ci-dessus La fonction de l'interface de connexion est implémentée, mais il y a quelques petits défauts, c'est-à-dire que l'écriture du fichier verrouillé n'est pas très bonne, et il y aura deux lignes vides de cette façon, uniquement le fichier précédent. peut être écrit et lu, et placé dans une liste, puis ajoutez l'utilisateur verrouillé à cette liste, relisez le fichier et le code sera corrigé ci-dessous.

         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

Dans le code, on passe par une étape de conversion lors de l'écriture du fichier, comme le montre la figure ci-dessous :

Ce qui précède est le processus de conversion de fichiers. Cette méthode est une forme de traitement de fichiers couramment utilisée, mais veuillez noter que lorsque vous utilisez "w" pour lire des fichiers, cette méthode doit y être accordée. détruisez le contenu original du fichier, assurez-vous de l'utiliser avec prudence, n'endommagez pas accidentellement la bibliothèque de fichiers de l'entreprise, et votre patron vous dépassera alors.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn