python3 用户登录验证的小功能
用户登录验证,记录一下,还需要修改黑名单不合理
#!/usr/bin/env python3
'''
需求:编写登录接口
1、输入用户名和密码
2、验证用户密码成功后输出欢迎消息
3、3次没有验证通过锁定账户
'''
# user = {'test1':'123','test2':'234','test3':'345'}
#将文件内容转换为字典
with open('user_pass_sql', 'r')as f:
user = dict(line.strip().split(':') for line in f if line)
# print(user)#打印字典user
f.close() # print(user.keys())#打印字典user的key
# print(user.values())#打印字典user的values
user_input=input('Name:').strip()#用户输入账户
user_passwd=input('Passwd:')#用户输入密码 # fblack = open('black_list','r')#打开黑名单文件
# for len(user_input) == fblack.readlines():#判断用户是否在黑名单
# print('Account lockout!!!')
for line in open('black_list','r'):
if user_input == line.strip():
print('Account lockout!!!')
break
# fblack.close()#关闭文件
if len(user_input) == 0:#判断用户输入是否为空
print('Users cannot be null!!')
break
else:
# if list(user.keys())[a] == user_input and list(user.values())[a] == user_passwd:
if user_input in user and user_passwd == user[user_input]:#判断用户名和密码是否一致
print('Login successfully!Welcome!!!')
else:
#用户或者密码错误进入循环2次
for i in range(2):
print('User or Passwd error!!')
user_input = input('Name:').strip()
user_passwd = input('Passwd:')
if user_input in user and user_passwd == user[user_input]:#判断用户输入的用户名和密码时候和文件中匹配
print('Login successfully!Welcome!!!')
break#跳出循环
else:
black_list = open('black_list','a')#打开文件模式追加
black_list.write('\n')
black_list.write(user_input) #3次错误之后写入黑名单
black_list.close()#关闭文件
print('Account lockout!!!')
重新写了一版:
#!/usr/bin/env python3
def black_list():
with open("black_list", "a") as black:
black.write('\n' + user_input.strip()) #将变量user_input写到文件中,\n为换行 with open('user_passwd', 'r') as f: #打开用户密码文件
user = dict(line.strip().split(":") for line in f if line)#将文件内容转换为字典 passwd_error = [] #创建密码错误列表,密码错误一次将用户写入列表
user_does_not_exist = [] #创建不存在用户列表,不存在用户写入列表 for i in range(10): #循环10次
user_input = input("Name:").strip() #输入账号,strip去除两侧空格
user_passwd = input("Passwd:").strip() #输入密码,strip去除两侧空格
with open("black_list","r") as black: #打开黑名单文件
if user_input in black: #判断用户是否在黑名单中
print("◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇\n"
"◇◇◇◇◇◇◇◇◇账户被锁定,请与管理员联系!!◇◇◇◇◇◇◇◇\n"
"◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇\n")
break #退出循环
elif len(user_input) == 0: #判断用户输入是否为空格
print("◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇\n"
"◇◇◇◇◇◇◇◇◇◇◇◇用户名不能为空!!◇◇◇◇◇◇◇◇◇◇◇\n"
"◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇\n")
continue #退出本次循环
else:
if user_input in user and user[user_input] == user_passwd:#判断用户名和密码是否一致
print("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"
"※※※※※※※※※※※※※欢迎登陆!!※※※※※※※※※※※※※※※\n"
"※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n")
break
elif user_input not in user: #判断用户是都存在
print("◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇\n"
"◇◇◇◇◇◇◇◇◇◇◇◇用户不存在,请重试!!◇◇◇◇◇◇◇◇◇◇◇◇\n"
"◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇\n")
user_does_not_exist.append(user_input) #用户不存在就写入用户不存在列表中
if user_does_not_exist.count(user_input) == 5: #统计用户不在列表中不存在的用户次数,超过5次锁定
print("☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n"
"☆☆☆☆☆☆☆☆☆☆☆尝试次数过多,账户锁定!!☆☆☆☆☆☆☆☆☆☆☆\n"
"☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n")
black_list() #调用函数black_list
break
else:
print("☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n"
"☆☆☆☆☆☆☆☆☆☆☆☆☆密码错误!!☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n"
"☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n")
passwd_error.append(user_input) #将密码错误用户写入密码错误列表中
if passwd_error.count(user_input) == 3: #统计密码错误用户是否超过3次
print("〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n"
"〓〓〓〓〓〓〓〓〓〓密码错误3次,账户锁定,请联系管理员!!〓〓〓〓〓〓〓〓〓〓\n"
"〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n")
black_list() #调用函数black_list
break
else:
continue #退出当前循环
else:
print("〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n"
"〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓尝试次数过多!!〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n"
"〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n")
再修改一下:
#!/usr/bin/env python3
def black_list():
with open("black_list", "a") as black:
black.write('\n'+user_input.strip()) #将变量user_input写到文件中,\n为换行 with open('user_passwd', 'r') as f: #打开用户密码文件
user = dict(line.strip().split(":") for line in f if line)#将文件内容转换为字典 passwd_error = [] #创建密码错误列表,密码错误一次将用户写入列表
user_does_not_exist = [] #创建不存在用户列表,不存在用户写入列表 break_flag = False #默认设置为False,用来退出多层循环
continue_flag = False
for i in range(10): #循环10次
user_input = input("Name:").strip() #输入账号,strip去除两侧空格
user_passwd = input("Passwd:").strip() #输入密码,strip去除两侧空格
with open("black_list","r") as black: #打开黑名单文件
for line in black:
if user_input == line.strip(): #判断用户是否在黑名单中
Tips = '账户%s被锁定,请与管理员联系!'%user_input #定义字符串,将用户输入变量带入字符串,%s代替用户输入
print(Tips.center(30,'*')) #字符串center方法,字符串居中,30为总长度,空白处用*代替
break_flag = True #将break_flag的值重新定义
break #退出循环
if break_flag == True: #判断break_flag的值是否为True
break
if len(user_input) == 0 or len(user_passwd) == 0: #判断用户输入是否为空格
Tips = '用户名或密码不能为空!'
print(Tips.center(30,'*'))
continue #退出本次循环
if user_input in user and user[user_input] == user_passwd:#判断用户名和密码是否一致
Tips = '欢迎用户%s登录系统'%user_input
print(Tips.center(30,'*'))
break
elif user_input not in user: #判断用户是都存在
Tips = '用户%s不存在,请重试!'%user_input
print(Tips.center(30,'*'))
user_does_not_exist.append(user_input) #用户不存在就写入用户不存在列表中
if user_does_not_exist.count(user_input) == 5: #统计用户不在列表中不存在的用户次数,超过5次锁定
Tips = '尝试次数过多,账户%s锁定!'%user_input
print(Tips.center(30,'*'))
black_list() #调用函数black_list
break
else:
Tips = '密码错误!'
print(Tips.center(30,'*'))
passwd_error.append(user_input) #将密码错误用户写入密码错误列表中
if passwd_error.count(user_input) == 3: #统计密码错误用户是否超过3次
Tips = '密码错误3次,账户%s锁定,请联系管理员!'%user_input
print(Tips.center(30,'*'))
black_list() #调用函数black_list
break
else:
continue #退出当前循环
else:
Tips = '尝试次数过多!'
print(Tips.center(30,'*'))
python3 用户登录验证的小功能的更多相关文章
- 如何使用Django实现用户登录验证
最初开始搞用户登录验证的时候感觉没什么难的,不就是增删改查中的查询数据库么,但是还是遇到许多小问题,而且感觉在查询数据库的时候,要把前端的数据一条一条的进行比对,会导致我的代码很丑,而且方式很不智,所 ...
- android loginDemo +WebService用户登录验证
android loginDemo +WebService用户登录验证 本文是基于android4.0下的loginActivity Demo和android下的Webservice实现的.l ...
- Python程序练习1-模拟用户登录验证
1.功能简介 此程序模拟用户登录验证的过程,实现用户名输入.黑名单检测.用户有效性判别.密码输入及验证等.用户在3次以内输入正确密码登陆成功,连续输错3次密码登陆失败,且该用户名被记录在黑名单,黑名单 ...
- djangorestframework-jwt自带的认证视图进行用户登录验证源代码学习
Django REST framework JWT djangorestframework-jwt自带的认证视图进行用户登录验证源代码学习 SECRET_KEY = '1)q(f8jrz^edwtr2 ...
- cookie实现用户登录验证
cookie实现用户登录验证 1, INSTALLED_APPS中注册app03 2,在主程序中新建映射关系到app3的url中 from django.conf.urls import url,in ...
- Django开发简单采集用户浏览器信息的小功能
Django开发简单采集用户浏览器信息的小功能 Centos环境准备 yum install –y python-pip export http_proxy=http://10.11.0.148:80 ...
- 用javascript实现简单的用户登录验证
用javascript实现简单的用户登录验证 <!DOCTYPE html> <html lang="en"> <head> <meta ...
- django 从零开始 8 用户登录验证 待测
看文档 djang 自带一个用户登录验证的方法,不过有些看着懵逼,去网上找了一圈,发现很多都是照抄文档说明的,几乎没说啥原理 特别是 from django.contrib.auth import a ...
- Java初学者作业——编写Java程序,实现用户登录验证。
返回本章节 返回作业目录 需求说明: 编写Java程序,实现用户登录验证. 若用户名与密码输入正确,则提示"登录成功,欢迎回来!",若用户名与密码不匹配,则提示"用户名和 ...
随机推荐
- Oracle - ORA-28547: Connection to server failed,probable Oracle Net admin error (Navicat)
一.异常 用Navicat连接Oracle数据库时抛出的异常 二.方案 使用 Oracle 安装目录 \Oracle\product\11.2.0\dbhome_1\BIN 下的 oci.dll 替换 ...
- 解决WPF图片模糊最佳方法
对于图片显示模糊相信很多人都遇到过,其实,有些图片会因为垂直分辨率/水平分辨率不同而造成在WPF界面上显示出现模糊. WPF默认是96Dpi,但有些图片可能是72DPI甚至更低或更高,这样就会出现图片 ...
- 巧用花生壳将局域网内的FTP和www服务器发布到互联网
一.目的:用生壳发布FTP和mail服务器到互连网. 二.网络环境:(出租房多家共用路由器上网,ADSL的1Mbps带宽,动态PPPOE拨号,帐号和密码存储在soho路由器中,路由器自动联机上网,并为 ...
- String str = "1,2,3,4,5,6" 如何将这个字符串转换成int数组
String str = "1,2,3,4,5,6"; string[] strS = str.Split(','); int[] num = new int[strS.Lengt ...
- 沉淀再出发:redis的安装和使用
沉淀再出发:redis的安装和使用 一.前言 下面让我们看看Redis这个键值对内存数据库的使用方法和相关注意事项. 二.Redis的安装和使用 2.1.Redis的定义 REmote DIction ...
- August 24th 2017 Week 34th Thursday
If you have choices, choose the best. If you have no choice, do the best. 如果有选择,那就选择最好的:如果没有选择,那就努力做 ...
- 51nod 1349 最大值
题目看这里 找到每个元素g[i]作为最大值的区间[L,R],那么以他为最大值的区间数有(i-L+1)*(R-i+1)个. 为了加速,以k为最大值的区间数放入H[k],再以此统计一个前缀和,更新入H.那 ...
- 四种Timer的区别和用法
1.System.Threading.Timer 线程计时器 1.最底层.轻量级的计时器.基于线程池实现的,工作在辅助线程. 2.它并不是内在线程安全的,并且使用起来比其他计时器更麻烦.此计时器通常不 ...
- codeforces 17C Balance(动态规划)
codeforces 17C Balance 题意 给定一个串,字符集{'a', 'b', 'c'},操作是:选定相邻的两个字符,把其中一个变成另一个.可以做0次或者多次,问最后可以生成多少种,使得任 ...
- 一个“日期”字符串进行比较的case
项目中有个功能是比较会员是否过期,review同事的代码,发现其写法比较奇葩,但线上竟也未出现bug. 实现大致如下: $expireTime = "2014-05-01 00:00:00& ...