Home  >  Article  >  Backend Development  >  Login interface

Login interface

巴扎黑
巴扎黑Original
2017-06-23 14:52:341393browse

Assignment 1: Write login interface

1. Enter username and password

2. Display the welcome message after successful authentication

3. Lock after three incorrect entries

Ideas :

## (1) The user enters the user name;

(2) Go to the lock file to verify whether the user name is locked;

 (3) Go to the current user to verify whether the user exists;

 (4) The user enters the password and is locked after three incorrect entries

(5) After locking, delete the user name from the current file and add it to the locked file.

Pay attention to file reading, modification, and writing operations. These operations must be completed with the help of lists, otherwise it will cause some unnecessary errors. Finally, define a function to complete Just call these functions when using these operations.

When operating list files, you must pay attention to the processing of line breaks and how to add elements. These methods are best to use lists and dictionaries to read and write files, so as to keep the format neat. .

The code is as follows:

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

The above code is implemented The function of the login interface, but there are some small flaws, that is, the writing of the locked file is not very good, and there will be two blank lines. This method can only write and read the previous file and put it in a list. , then add the locked user to this list, read the file again, and the code will be corrected below.

         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

In the code, we go through a step of conversion when writing the file, as shown in the following figure:

The above is the process of file conversion. This method is a commonly used form of file processing, but please note that when using "w" to read files, special attention must be paid to it. This method will destroy the original file content and must Use it with caution, don't accidentally damage the company's file library, and your boss will pass you.

The above is the detailed content of Login interface. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn