• 登录接口


    登录接口
    需求:
    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...
  • 相关阅读:
    ArcGis Desktop arcmap安装步骤
    ArcMap 中添加 ArcGis server
    arcgis server 安装
    哨兵数据处理,哨兵数据水体数据提取
    Web安全之SQL注入攻击技巧与防范(转)
    干货分享丨Python从入门到编写POC之初识OOP和类
    干货分享丨Python从入门到编写POC之爬虫专题
    干货分享丨XSS利用进阶
    CVE-2020-9484 Apache Tomcat反序列化漏洞浅析
    干货分享丨Python从入门到编写POC之常用的标准库
  • 原文地址:https://www.cnblogs.com/jack34/p/6101132.html
Copyright © 2020-2023  润新知