• 简单登录接口实践


    实现要求:

    一、编写登录接口

    • 输入用户名密码
    • 认证成功后显示欢迎信息
    • 输错三次后锁定
     1 #!/usr/local/env python3
     2 # -*- coding:utf-8 -*-
     3 '''
     4 Author:@Alvin Lv
     5 Blog:http://www.cnblogs.com/Xiaolong-Lv/
     6 E-mail:lxtxlxl@163.com
     7 '''
     8  import getpass
     9  LoginTimes =0
    10 while LoginTimes < 3:  #设定用户错误登录次数
    11     name=input("Please input your username:")
    12     pwd=getpass.getpass("Please input your password:")
    13     if name=='lxl' and pwd=='2016':        #验证正确后允许进入
    14         print"Welcome,login succeed!"
    15         break             #退出循环
    16     else:
    17         print"Input userinfo error,Login again:"
    18         LoginTimes +=1   #输入错误次数加1
    19 else:
    20     print"Sorry,account has been locked!"
    方法一

    以上代码只是简单的实现了题目的要求,且具有很大的局限性,根本无法满足线上生产环境的要求,在实际的生产环境中,我们的用户登录信息数据一定是存储在数据库中的,且不止一条用户数据,因此我们使用python的文件操作来模拟线上数据库,通过遍历文件中用户的信息来实现数据的读取,改进后的代码如下:

     1 #!/usr/local/env python3
     2 # -*- coding:utf-8 -*-
     3 '''
     4 Author:@Alvin Lv
     5 Blog:http://www.cnblogs.com/Xiaolong-Lv/
     6 E-mail:lxtxlxl@163.com
     7 '''
     8 import sys,os,getpass
     9 os.system('clear')
    10 i = 0
    11 while i < 3:                                                        #用户信息错误次数限定
    12     name = raw_input("请输入用户名:")
    13     lock_file = open('account_lock.txt','r+')             #检查锁文件(黑名单)中是否存在此用户
    14     lock_list = lock_file.readlines()
    15     for lock_line in lock_list:                                     #遍历lock文件 
    16         lock_line = lock_line.strip('
    ')                                                               #如果用户已存在lock文件就直接退出
    17             sys.exit('用户 %s 已经被锁定,退出' % name)  
    18     user_file = open('account.txt','r')                             #打开用户帐号信息文件 
    19     user_list = user_file.readlines()                               
    20     for user_line in user_list:                                     #遍历账号信息文件
    21         (user,password) = user_line.strip('
    ').split()             #获取帐号和密码信息
    22             if name == user:                                            #如用户名正常匹配
    23             j = 0 while j < 3:                                            #只要用户密码异常不超过3次就不断循环
    24                 passwd = getpass.getpass('请输入密码:')              #输入隐藏密码if passwd == password:                              #密码正确,提示欢迎登录print('欢迎登录管理平台,用户%s' % name)        
    25                     sys.exit(0)                                     #正常退出else:
    26                     print('用户 %s 密码错误,请重新输入,还有 %d 次机会' % (name,2 - j))
    27                 j += 1#密码输入错误后,循环值增加1else:
    28                 lock_file.write(name + '
    ')                        #密码输入三次错误后,将该用户追加到文件
    29                 sys.exit('用户 %s 达到最大登录次数,将被锁定并退出' % name)
    30         else:
    31             pass                                                    #当用户没匹配时,跳过并继续循环else:
    32         print('用户 %s 不存在,请重新输入,还有 %d 次机会' % (name,2 - i))
    33     i += 1#当用户输入错误时,循环值增加1else:
    34     sys.exit('用户 %s 不存在,退出' % name)                           #用户输入三次错误后,异常退出
    35            
    36 lock_file.close()                                                   #关闭LOCK文件
    37 user_file.close()   
    方法二

    方法二虽然比方法一得代码看起来健壮,但是还是存在一定的bug,使用不同的用户名连续输错三次密码,也会被添加到黑名单后锁定,如何解决这个问题,后续补充。。。。。。。。。。。。

  • 相关阅读:
    新的开始!
    find命令之mtime
    glances服务器监控工具
    centos7最小化安装改为图形界面
    ansible笔记(3)-文件操作模块(上)
    php-fpm参数详解
    ansible笔记(2)-模块简介
    centos创建交换分区
    等保测评三级整改-身份鉴别
    vsftp安装配置
  • 原文地址:https://www.cnblogs.com/Xiaolong-Lv/p/5126032.html
Copyright © 2020-2023  润新知