用户登录验证,记录一下,还需要修改黑名单不合理

 #!/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 用户登录验证的小功能的更多相关文章

  1. 如何使用Django实现用户登录验证

    最初开始搞用户登录验证的时候感觉没什么难的,不就是增删改查中的查询数据库么,但是还是遇到许多小问题,而且感觉在查询数据库的时候,要把前端的数据一条一条的进行比对,会导致我的代码很丑,而且方式很不智,所 ...

  2. android loginDemo +WebService用户登录验证

        android loginDemo +WebService用户登录验证 本文是基于android4.0下的loginActivity Demo和android下的Webservice实现的.l ...

  3. Python程序练习1-模拟用户登录验证

    1.功能简介 此程序模拟用户登录验证的过程,实现用户名输入.黑名单检测.用户有效性判别.密码输入及验证等.用户在3次以内输入正确密码登陆成功,连续输错3次密码登陆失败,且该用户名被记录在黑名单,黑名单 ...

  4. djangorestframework-jwt自带的认证视图进行用户登录验证源代码学习

    Django REST framework JWT djangorestframework-jwt自带的认证视图进行用户登录验证源代码学习 SECRET_KEY = '1)q(f8jrz^edwtr2 ...

  5. cookie实现用户登录验证

    cookie实现用户登录验证 1, INSTALLED_APPS中注册app03 2,在主程序中新建映射关系到app3的url中 from django.conf.urls import url,in ...

  6. Django开发简单采集用户浏览器信息的小功能

    Django开发简单采集用户浏览器信息的小功能 Centos环境准备 yum install –y python-pip export http_proxy=http://10.11.0.148:80 ...

  7. 用javascript实现简单的用户登录验证

    用javascript实现简单的用户登录验证 <!DOCTYPE html> <html lang="en"> <head> <meta ...

  8. django 从零开始 8 用户登录验证 待测

    看文档 djang 自带一个用户登录验证的方法,不过有些看着懵逼,去网上找了一圈,发现很多都是照抄文档说明的,几乎没说啥原理 特别是 from django.contrib.auth import a ...

  9. Java初学者作业——编写Java程序,实现用户登录验证。

    返回本章节 返回作业目录 需求说明: 编写Java程序,实现用户登录验证. 若用户名与密码输入正确,则提示"登录成功,欢迎回来!",若用户名与密码不匹配,则提示"用户名和 ...

随机推荐

  1. 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 替换 ...

  2. 解决WPF图片模糊最佳方法

    对于图片显示模糊相信很多人都遇到过,其实,有些图片会因为垂直分辨率/水平分辨率不同而造成在WPF界面上显示出现模糊. WPF默认是96Dpi,但有些图片可能是72DPI甚至更低或更高,这样就会出现图片 ...

  3. 巧用花生壳将局域网内的FTP和www服务器发布到互联网

    一.目的:用生壳发布FTP和mail服务器到互连网. 二.网络环境:(出租房多家共用路由器上网,ADSL的1Mbps带宽,动态PPPOE拨号,帐号和密码存储在soho路由器中,路由器自动联机上网,并为 ...

  4. 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 ...

  5. 沉淀再出发:redis的安装和使用

    沉淀再出发:redis的安装和使用 一.前言 下面让我们看看Redis这个键值对内存数据库的使用方法和相关注意事项. 二.Redis的安装和使用 2.1.Redis的定义 REmote DIction ...

  6. August 24th 2017 Week 34th Thursday

    If you have choices, choose the best. If you have no choice, do the best. 如果有选择,那就选择最好的:如果没有选择,那就努力做 ...

  7. 51nod 1349 最大值

    题目看这里 找到每个元素g[i]作为最大值的区间[L,R],那么以他为最大值的区间数有(i-L+1)*(R-i+1)个. 为了加速,以k为最大值的区间数放入H[k],再以此统计一个前缀和,更新入H.那 ...

  8. 四种Timer的区别和用法

    1.System.Threading.Timer 线程计时器 1.最底层.轻量级的计时器.基于线程池实现的,工作在辅助线程. 2.它并不是内在线程安全的,并且使用起来比其他计时器更麻烦.此计时器通常不 ...

  9. codeforces 17C Balance(动态规划)

    codeforces 17C Balance 题意 给定一个串,字符集{'a', 'b', 'c'},操作是:选定相邻的两个字符,把其中一个变成另一个.可以做0次或者多次,问最后可以生成多少种,使得任 ...

  10. 一个“日期”字符串进行比较的case

    项目中有个功能是比较会员是否过期,review同事的代码,发现其写法比较奇葩,但线上竟也未出现bug. 实现大致如下: $expireTime = "2014-05-01 00:00:00& ...