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

 #!/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. DockerFile简介以及使用

    DockerFile是用来构建docker镜像的构建文件,是有一系列命令和参数构成的脚本 构建的三步骤:编写dockerfile文件→build构建→docker run dockerfile保留字指 ...

  2. Linux常用基本指令——文件处理命令

    书籍方面的推荐就不做介绍,免得别人说我有广告嫌疑.大家可以直接上百度,书籍和视频遍地都是,Linux这些方面的知识都是自己在学习视频和看书的总结,内容上可能会不完美.如果有更多的见解,欢迎直接评论. ...

  3. xsd文件记录

    <MESSAGE Version="1.0"> <CV_HEADER MsgType=" /> <QUERY_PROFILE> < ...

  4. 企业办公领域: Windows + Office的组合在未来能抵挡住 Google Apps的冲击么

    从个人角度讲,我基本上不怎么喜欢微软的产品,即便是其无处不见的Windows. Windows 8用了几个月的后,实在无法忍受其某些SB的设计,还是换回Win7.另外自从用上了MacBook 以后, ...

  5. December 25th 2016 Week 53rd Sunday

    Patience is bitter, but its fruit is sweet. 忍耐是痛苦的,但它的果实是甜蜜的. What can we do if there is no fruit of ...

  6. JS hashMap实例详解

    链接:http://www.jb51.net/article/85111.htm JS hashMap实例详解 作者:囧侠 字体:[增加 减小] 类型:转载 时间:2016-05-26我要评论 这篇文 ...

  7. WinRAR(5.21)-0day漏洞-始末分析

    0x00 前言 上月底,WinRAR 5.21被曝出代码执行漏洞,Vulnerability Lab将此漏洞评为高危级,危险系数定为9(满分为10),与此同时安全研究人员Mohammad Reza E ...

  8. 【LGP5161】WD与数列

    题目 也是可以用\(SAM\)来做的 我们发现要求原串不相交,那么就要求在差分序列里不相交并且不相邻 考虑一下\(SAM\),暴力做法自然是对每一个节点统计其所有\(endpos\)的影响 既然这样我 ...

  9. 【[SDOI2008]Sandy的卡片】

    被\(mhr\)的暴力干翻了 这道题做法还是非常好想的 先做一遍差分,在每个串的某尾插入一个特殊字符,再将所有的串拼接在一起 现在的问题就转化为找到一个最长的公共子串使得其出现了\(n\)次,但是在一 ...

  10. virtualbox+vagrant学习-4-Vagrantfile-8-WinSSH

    WinSSH WinSSH通信器是专门为OpenSSH的Windows本机端口构建的.它不依赖于类posix的环境,这种环境消除了额外的软件安装(如cygwin)以获得适当功能的需求. 想获得更多的信 ...