简单登录接口实践
实现要求:
一、编写登录接口
- 输入用户名密码
- 认证成功后显示欢迎信息
- 输错三次后锁定
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('\n') #如果用户已存在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('\n').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 + '\n') #密码输入三次错误后,将该用户追加到文件 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,使用不同的用户名连续输错三次密码,也会被添加到黑名单后锁定,如何解决这个问题,后续补充。。。。。。。。。。。。