简单登录接口实践

实现要求:

一、编写登录接口

  • 输入用户名密码
  • 认证成功后显示欢迎信息
  • 输错三次后锁定
 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,使用不同的用户名连续输错三次密码,也会被添加到黑名单后锁定,如何解决这个问题,后续补充。。。。。。。。。。。。

原文地址:https://www.cnblogs.com/Xiaolong-Lv/p/5126032.html