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

 #!/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. Effective C++ Notes

    Item 07 : 为多态基类声明virtual析构函数 #include <iostream> using namespace std; class Base { public: Bas ...

  2. Linux(CentOS)网卡的基本设置

    临时设置 修改IP地址: ifconfig eth0 10.60.45.205 mask 255.255.255.0 修改网关地址 route add default gw 10.60.45.1 de ...

  3. December 18th 2016 Week 52nd Sunday

    May your love soar on the wings of a dove in flight. 愿你的爱乘着飞翔中的白鸽,展翅高飞. May my life soar on the wing ...

  4. Microsoft Visual Studio 遇到了问题需要关闭

    新年刚来Microsoft Visual Studio就找麻烦,debug的时候如果不打断点可以正常跑过,一打断点就崩溃,重启.报的问题是:Microsoft Visual Studio 遇到了问题需 ...

  5. pyenv - python版本管理

    1. 安装pyenv brew install pyenv 2. 安装python其它版本(如:python 3.6.7) pyenv install --list #查看可以安装的python版本 ...

  6. [朴孝敏/Loco][Nice Body]

    歌词来源:http://music.163.com/#/song?id=28738294 作曲 : 勇敢兄弟/大象王国 [作曲 : 勇敢兄弟/大象王国] 作词 : 勇敢兄弟 [作词 : 勇敢兄弟] A ...

  7. Id vs Instancetype

    我写了一篇 Id vs Instancetype的文章,欢迎访问!

  8. js 调用 oc 的解释

    JavaScriptCore NSInvocation js解释器在解释函数调用时,会在执行环境进行函数搜索,主调者类型判定: 如果是js调用,直接解释执行: 如果是oc调用,则将调用打包成NSInv ...

  9. BZOJ2208:[JSOI2010]连通数(DFS)

    Description Input 输入数据第一行是图顶点的数量,一个正整数N. 接下来N行,每行N个字符.第i行第j列的1表示顶点i到j有边,0则表示无边. Output 输出一行一个整数,表示该图 ...

  10. IIs和ftp

    简单的说,FTP就是完成两台计算机之间的拷贝,从远程计算机拷贝文件至自己的计算机上,称之为“下载(download)”文件.若将文件从自己计算机中拷贝至远程计算机上,则称之为“上载(upload)”文 ...