zoukankan      html  css  js  c++  java
  • 登录接口

    登录接口
    需求:
    1、输入用户密码;
    2、认真成功后显示欢迎信息;
    3、输错三次后锁定

    程序应该遵循先简单后复杂的步骤,因此我把以上需求分解为几个步骤来做
    1、我先考虑的是输入用户账号和密码情况的循环,没有考虑次数和锁定。
    代码如下所示:

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 # Author:Jack.Lee
     4 # FileName: login1.py
     5 
     6 import getpass
     7 
     8 #i = 0
     9 #j = 0
    10 name = 'liguanjie'
    11 passwd = '123456'
    12 passwd_login = False
    13 name_login = False
    14 while not name_login:
    15     username = input("Please enter your username:")
    16     if name == username:
    17         while not passwd_login:
    18             #password = input("Please enter your password:")  #该方式密码采用明文方式输入,由于pycharm不能对密文进行测试,所以采用这方式来代替验证测试效果
    19             password = getpass.getpass('Please enter your password:')   #该方式密码采用密文方式输入
    20             if passwd == password:
    21                 print("Welcome to login!")
    22                 passwd_login = True
    23             else:
    24                 print("33[31;0mSorry,try again.33[0m")
    25         name_login = True
    26     else:
    27         print("33[31;0mSorry,try again.33[0m")
    login1


    2、对账号和密码输入验证优化,增强安全性,并且账号或者密码输错三次将停止验证。
    (while+if实现三次循环验证)代码如下:

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 # Author:Jack.Lee
     4 # FileName: login2.py
     5 
     6 import getpass
     7 user = 'liguanjie'
     8 passwd = '123456'
     9 login_flag = False
    10 i = 0
    11 
    12 while not login_flag:
    13     if i < 3:
    14         username = input("Please enter your username:")
    15         password = input("Please enter your password:")
    16         #password = getpass.getpass('Please enter your password:')
    17         if user == username and passwd == password:
    18             print("33[34;1mWelcome to login!33[0m")
    19             login_flag = True
    20         else:
    21             print("33[31;1mInvalid username or password .33[0m")
    22             i = i + 1
    23     else:
    24         print("33[31;0mSorry,bye!33[0m")
    25         login_flag = True
    login2

     
    (for+if 实现三次循环验证)代码如下:

     1 import getpass
     2 user = 'liguanjie'
     3 passwd = '123456'
     4 
     5 for i in range(3):
     6     username = input("Please enter your username:")
     7     password = input("Please enter your password:")
     8     # password = getpass.getpass('Please enter your password:')
     9     if user == username and passwd == password:
    10         print("33[34;1mWelcome to login!33[0m")
    11         break
    12     else:
    13         print("33[31;1mInvalid username or password .33[0m")
    14 else:
    15     print("33[31;0mSorry,bye!33[0m")
    login3


    3、用户和密码采用一个文件存储,通过查询文件来获取账号和密码

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 # Author:Jack.Lee
     4 # FileName: login4.py
     5 
     6 import getpass
     7 
     8 login_flag = False
     9 i = 0
    10 
    11 while not login_flag:
    12     if i < 3:
    13         username = input("Please enter your username:")
    14         password = getpass.getpass('Please enter your password:')
    15         f = open('user_db.txt','r')
    16         for line in f.readlines():
    17             user,passwd=line.strip().split()
    18             if user == username and passwd == password:
    19                 print("33[34;1mWelcome to login!33[0m")
    20                login_flag = True
    21                 break
    22         else:
    23             print("33[31;1mInvalid username or password .33[0m")
    24             i = i + 1
    25         f.close()
    26     else:
    27         print("33[31;0mSorry,bye!33[0m")
    28         login_flag = True
    login4

    4、先查询用户是否锁定,再输入密码

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 # Author:Jack.Lee
     4 # FileName:login4.py
     5 '''程序运行流程如下:
     6 1、输入用户名;
     7 2、根据锁定表判断用户是否处于锁定状态,如果处于锁定,就终结程序,输出锁定提示语,否则执行下面的步骤;
     8 3、输入密码;
     9 4、根据用户表的账号和密码,对应第一步和第三步输入的用户名和密码是否正常,如果正确就输出登录成功,否则执行第五步;
    10 5、继续输入密码,当密码输错次数大于3次时,就会终结整个程序,并且提示bye提示语,退出整个程序。
    11 '''
    12 
    13 import getpass
    14 import os
    15 
    16 os.system('clear')   #执行清屏,模拟登录效果
    17 login_flag = False
    18 i = 0
    19 
    20 username = input("Please enter your username:")
    21 l = open('lock.txt')
    22 for line in l.readlines():
    23     if username == line.strip():
    24         print("33[31;1mSorry,%s is locked!33[0m'"%username)
    25         break
    26 else:
    27     while not login_flag:
    28         if i < 3:
    29             password = getpass.getpass('Please enter your password:')
    30             f = open('user_db.txt')
    31             for line in f.readlines():
    32                 user,passwd=line.strip().split()
    33                 if user == username and passwd == password:
    34                     print("33[34;1mWelcome to login!33[0m")
    35                     login_flag = True
    36                     break
    37             else:
    38                 print("33[31;1mInvalid username or password .33[0m")
    39                 i = i + 1
    40                 f.close()
    41         else:
    42             print("33[31;1mSorry,bye!33[0m")
    43             login_flag = True
    login5


    5、先查询用户是否锁定,不在锁定状态再输入密码,当输入密码次数大于三次就把用户写进锁定表

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 # Author:Jack.Lee
     4 # FileName: login5.py
     5 
     6 '''程序运行流程如下:
     7 1、输入用户名;
     8 2、根据锁定表lock.txt判断用户是否处于锁定状态,如果处于锁定,就终结程序,输出锁定提示语,否则执行下面的步骤;
     9 3、输入密码;
    10 4、根据用户表user_db.txt的账号和密码,对应第一步和第三步输入的用户名和密码是否正常,如果正确就输出登录成功,否则执行第五步;
    11 5、继续输入密码,当密码输错次数大于3次时,就会终结输密码流程,并进行第6步;
    12 6、提示输入密码次数过多,并且把改用户名存储到锁定表lock.txt;
    13 7、退出整个程序
    14 '''
    15 
    16 import getpass
    17 import os
    18 
    19 os.system('clear')   #执行清屏,模拟登录效果
    20 login_flag = False
    21 i = 0
    22 
    23 username = input("Please enter your username:")
    24 l = open('lock.txt')
    25 for line in l.readlines():
    26 #    name = line.strip()
    27     if username == line.strip():
    28         print("33[31;1mSorry,%s is locked!33[0m'"%username)
    29         break
    30 
    31 else:
    32     while not login_flag:
    33         if i < 3:
    34             password = getpass.getpass('Please enter your password:')
    35             f = open('user_db.txt')
    36             for line in f.readlines():
    37                 user, passwd = line.strip().split()
    38                 if user == username and passwd == password:
    39                     print("33[34;1mWelcome to login!33[0m")
    40                     login_flag = True
    41                     f.close()
    42                     break
    43             else:
    44                 print("33[31;1mInvalid username or password .33[0m")
    45                 i = i + 1
    46         else:
    47             print("33[31;1mSorry,you input too many, %s has been locked!bye!33[0m"%username)
    48             lock = open('lock.txt', 'a')
    49             lock.write(username + '
    ')
    50             login_flag = True
    51             lock.close()
    52 l.close()
    login6


    备注:上面程序发现如果输入用户不在用户表,也进行输入密码处理,并且在输入次数大于3次也把该用户写入锁定表,不符合常理要求。因此要对输入用户名判断,如何在用户表查不到输入的用户应提示重新输入用户名和密码。
    优化如例6


    6、先查询用户是否锁定,再判断用户是否存在
      根据上述的尝试,并且对上面优化了一下。原理是无论是用户是什么状态,都要输入账号和密码再做判断,输入完后进行锁定判断;然后再做用户是否存在判断,如果用户不存在,重新输入账号和密码,次数超过3次自动退出程序;如果用户存在再对密码判断,密码错误运行给三次输入,如果3次都输错,就把该用户写入锁定用户表。

    程序如下:

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 # Author:Jack.Lee
     4 # FileName:login_final.py
     5 
     6 '''程序运行流程如下:
     7 1、输入用户名和密码;
     8 2、根据锁定表lock.txt判断用户是否处于锁定状态,如果处于锁定,就终结程序,输出锁定提示语,否则执行下面的步骤;
     9 3、再根据用户表user.txt的账号来判断是否存在该用户,如果不存在直接跳到开始重新输入账号和密码;
    10 4、在第三步如果用户存在,接下来判断密码是否正确,如果密码正确,就显示登陆成功,并且跳出;否则执行第5步;
    11 5、密码不正确,进行再次输入密码,但密码输入过程不能大于3次;
    12 6、当密码输错次数大于3次时,把用户写入到锁定表lock.txt,并且跳出流程。
    13 '''
    14 #import getpass
    15 
    16 name_flag = False                                   #定义用户和密码一次输入的跳出标识位,为True跳出
    17 passwd_flag = False                                 #定义密码输错重复输密码的跳出标识位,为True跳出
    18 i = 0
    19 j = 0
    20 
    21 while not name_flag:                                 #name_flag不为假,即真,执行下面步骤
    22     username = input("Username:")                   #把输入用户名和密码一次性输入再做判断,该方式接近实际
    23     #password = getpass.getpass('Password:')         #该方式为密文密码输入,由于pycharm没有getpass模块,所以不采用,正式环境要求使用
    24     password = input("Password:")
    25     #判断是否锁定
    26     lock_file = open('lock.txt','r')                        #打开锁定表
    27     for line in lock_file.readlines():                   #循环读取每行数据
    28         name = line.strip()                              #去掉空格把行数据给name
    29         if username == name :                            #下面判断用户是否给锁定
    30             print("33[31;1m对不起!%s用户已给锁定,请联系管理员解锁。33[0m'" %username)
    31             name_flag = True                            #由于用户给锁定,跳出整个输入过程
    32             lock_file.close()
    33             break
    34     else:                                 #由于没有锁定,进行下面判断账号是否存在和密码是否正确
    35         user_file = open('user.txt')
    36         for line in user_file.readlines():
    37             user,passwd = line.strip().split()
    38             if username == user:   #判断用户是否存在,如果存在就执行判断密码,否则输出密码不存在
    39                 while not passwd_flag:                        #passwd_flag不为假,即真,执行下面步骤
    40                     if password == passwd:                         #密码正确,进行登录,显示欢迎信息
    41                         print("33[34;1m登录成功,欢迎来到这里!33[0m")
    42                         name_flag = True                           #赋值True,用来跳出大while循环
    43                         passwd_flag = True                         #赋值True,用来跳出判断密码的while循环
    44                         exit()                                     #由于外面还有if循环,需直接跳出所有循环,采用exit()
    45                     else:                                         #密码不正确,请重试,次数不超过3次
    46                         i +=1                                     #密码输入次数+1
    47                         if i < 3:                                 #if密码次数小于3继续执行输入密码
    48                             print("33[31;1m密码错误,请重试。33[0m")
    49                             print("33[34;1m温馨提示:你还有%s次机会,账号将给锁定,请慎重!33[0m"%(3-i))
    50                             password = input("Password:")
    51                         else:
    52                             print("33[31;1m对不起!你输入的次数过多, %s用户已给锁定!33[0m" % username)  # 输出提示语:输入次数过多,给锁定
    53                             lock_file = open('lock.txt', 'a')
    54                             lock_file.write(username + '
    ')  # 把输入密码错误的用户名写入锁定表
    55                             name_flag = True
    56                             passwd_flag = True
    57                             lock_file.close()              # 关闭锁定表
    58                             exit()                         #跳出,结束
    59             else:                                         #用户不存在,输出提示语,并且允许重输
    60                 j +=1
    61                 if j < 3:
    62                     print("33[31;1m你输入的用户不存在,请重试。33[0m")
    63                     break                                #跳出该if循环
    64                 else:
    65                     name_flag = True                    #输入用户超过3次,跳出整个输入过程
    66                     print("33[31;1m请核实账号再试,谢谢!33[0m")
    67                     break                                #跳出该循环
    login_final

    由于现阶段在基础学习阶段,所以先简单再复杂,一步步来。

    Keep empowering yourself successfully...
  • 相关阅读:
    CodeForces 660D Number of Parallelograms
    【POJ 1082】 Calendar Game
    【POJ 2352】 Stars
    【POJ 2481】 Cows
    【POJ 1733】 Parity Game
    【NOI 2002】 银河英雄传说
    【NOI 2015】 程序自动分析
    【POJ 1704】 Georgia and Bob
    【HDU 2176】 取(m堆)石子游戏
    【SDOI 2016】 排列计数
  • 原文地址:https://www.cnblogs.com/jack34/p/6101132.html
Copyright © 2011-2022 走看看