python实例1:创建一个登陆模块
实现功能:
1、用户输入账户密码
2、验证账户是否存在于黑名单,如果存在于黑名单,则执行1,否则往下执行
3、验证用户名和密码。
3.1、如果验证成功,则打印欢迎信息并退出程序;
3.2、如果用户名存在,但是密码错误,则记录这个账户的错误次数(当前会话有效)
3.2.1、如果错误次数等于等于3,则将这个用户写入锁定文件保存
4、当错误次数(用户名存在但是密码错误 + 用户名不存在)大于等于3时,sleep(5),然后重置错误次数
- #!/usr/bin/env python3
- __author__ = 'DSOWASP'
- import getpass
- import time
- error_count = 0 #认证错误次数,包括用户名错误和用户名正确但是密码错误
- error_users = [] #用于存放用户名存在,但是密码错误的列表,存放数据格式如:
- # [{'name':'ds','count':1},{'name':owasp','count':2}],当某个用户的count为3时,就把这个
- # 用户加到locklist.txt文件中, 由于error_users保存在内存中,因此只有在当前会话有效
- flag1 = 0 #0表示用户名不存在,1表示用户名密码正确,2表示用户名正确,但是密码错误
- flag2 = 0 #0表示当前用户不存在与error_users中,1当前用户存在于error_users中或error为非空
- while True:
- username = input("用户名:").strip()
- password = input("密码:").strip()
- if username == "EXIT": #为了能正确退出程序而设置的
- break
- flag1 = 0
- with open('locklist.txt','r') as f_lock: #验证此用户是否被锁定
- u1 = f_lock.read().split("\n")
- if u1.count(username) != 0:
- print("此账户已被锁定!请选择其他账户登录")
- time.sleep(1)
- continue
- with open('userlist.txt','r') as f_user: #验证用户名和密码
- for line in f_user:
- user = line.split()[0]
- passwd = line.split()[1]
- if username == user:
- if password == passwd: #用户和密码都正确,设置flag=1
- print("Welcome to My Python Page!!!")
- flag1 = 1
- break
- elif flag2 == 1: #密码不对,且当前error_users为非空
- flag1 = 2 #用户名正确,但是密码不对
- for i in error_users: #判断这个用户是否已存在于error_users中
- # print("循环字典1",error_users)
- if username == i.get("name"): #在error_users中找到了这个账户
- # print("找到字典元素:",username,error_users)
- flag2 = 1 #当前用户存在于error_users中
- i["count"] = i.get("count") + 1 #置当前用户的密码错误次数加1
- if i.get("count") >= 3: #如果错误次数等于3
- with open('locklist.txt','a') as f_lock: #就锁定这个账户
- f_lock.write("\n%s" % username)
- print("输入错误次数过多,%s账户已被锁定!请联系管理员!" %(username))
- else: #如果错误次数小于3,则打印提示信息
- print("用户%s已输入错误密码%d次,此账户还剩%d次尝试机会" % (i.get("name") , i.get("count"),3 - i.get("count")))
- break #如果再error_users中找到了当前的用户,则退出error_users的循环
- else: #如果在error_users中没找到这个用户,则打印提示信息,并设置flag2=0
- flag2 = 0
- if flag2 == 0: #添加当前用户到error_users中。
- flag1 = 2 #用户名和密码都不正确
- print("添加前字典情况",error_users)
- error_users.append({'name':username,'count':1})
- print("用户%s已输入错误密码1次,此账户还剩2次尝试机会" % (username))
- print("添加%s用户到字典"%username)
- print(error_users)
- flag2 = 1 #设置flag2=1表示error_users为非空
- if flag1 == 1: #flag1=1表示用户名密码正确,则退出
- break
- elif flag1 == 0: #flag=0表示用户名不存在斌,error_count加1
- error_count += 1
- print("用户名不存在,请重新输入,还剩%d次尝试机会" %(3 - error_count))
- elif flag1 == 2: #flag1=2表示用户名正确但是密码错误.error_count 加1
- error_count += 1
- if error_count >= 3: #如果输错的此时大于等于3则打印提示信息,并sleep5秒,重置error_count
- print("输入错误次数超过3次,请5秒后重新输入")
- error_count = 0
- time.sleep(5)
python实例1:创建一个登陆模块的更多相关文章
- 如何创建一个 Lua 模块
如何创建一个 Lua 模块 翻译自: How to Create a Lua Module 译者: FreeBlues 正文 Lua编程语言 中的一个 模块(module)是一个包含函数和变量的代码片 ...
- ASP.NET Core模块化前后端分离快速开发框架介绍之2、快速创建一个业务模块
源码地址 GitHub:https://github.com/iamoldli/NetModular 演示地址 地址:https://nm.iamoldli.com 账户:admin 密码:admin ...
- python+mysql+flask创建一个微博应用(持续更新)
微博应用的结构: 用户管理,包括登录管理,会话,用户角色,个人档案及用户头像. 数据库管理,包括数据库迁移处理. Web表单支持,包括字段检验和用于防止垃圾邮件的验证码功能. 大数据的分页功能. 全文 ...
- Docker实例:创建一个点到点连接
默认情况下,Docker 会将所有容器连接到由 docker0 提供的虚拟子网中. 用户有时候需要两个容器之间可以直连通信,而不用通过主机网桥进行桥接. 解决办法很简单:创建一对 peer 接口,分别 ...
- python使用__new__创建一个单例模式(单例对象)
#单例模式:使一个类只产生一个对象.他们的id地址都指向同一个内存地址 第一步:理解谁创建了对象 # 单例模式# 首先明白,我们在创建一个类的对象的时候,其实是调用的这个类的父类,即继承object, ...
- python web编程 创建一个web服务器
这里就介绍几个底层的用于创建web服务器的模块,其中最为主要的就是BaseHTTPServer,很多框架和web服务器就是在他们的基础上创建的 基础知识 要建立一个Web 服务,一个基本的服务器和一个 ...
- 用Python+qrcode库创建一个包含信息的二维码
安装qrcode库和PIL库 在命令行中分别输入pip install qrcode 和pip install pillow 导入库格式如下: import PIL import qrcode 下面以 ...
- python使用wxPython创建一个简单的文本编辑器。
ubuntu下通过'sudo apt-get install python-wxtools'下载wxPython.load和save函数用于加载和保存文件内容,button通过Bind函数绑定这两个函 ...
- Python学习—基础篇之常用模块
常用模块 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要 ...
随机推荐
- CSS——display(Block none inline等)属性的用法
在一般的CSS布局制作时候,我们常常会用到display对应值有block.none.inline这三个值.下面我们来分别来认识和学习什么时候用什么值.这里通过CSS display知识加实例.图演示 ...
- 怎么关闭win10快速访问功能?关闭Windows10系统快速访问方法
怎么关闭win10快速访问功能?关闭Windows10系统快速访问方法 Windows10系统的"快速访问"功能很容易泄露电脑中的隐私,用什么方法可以让这个功能消失,避免电脑的个人 ...
- htmlspecialchars_decode
htmlspecialchars_decode htmlspecialchars_decode - 将特殊的 HTML 实体转换回普通字符 htmlspecialchars - 将特殊字符转换为 ...
- react-native-router-flux 页面跳转与传值
1.正向跳转假设情景:从Home页跳转到Profile页面,Profile场景的key值为profile 不带参数: Actions.profile 带参数: Actions.profile({'ke ...
- eclipse debug调试java程序的九个技巧
九个技巧: 逻辑结构 条件debug 异常断点 单步过滤 跳到帧 Inspect expressions display 远程debug 最早开始用eclipse的debug的时候,只会F5 F6 F ...
- 一个RecycleView的强大adapter
代码地址如下:http://www.demodashi.com/demo/12218.html 前言 一般我们要在mainActivity中利用RecycleView展示一个列表数据的时候,adapt ...
- MYSQL总结之sql语句大全
一.基础1.说明:创建数据库 CREATE DATABASE database-name .说明:删除数据库 drop database dbname .说明:备份sql server --- 创建 ...
- 使用spring-boot-admin对spring-boot服务进行监控(转自牛逼的人物)
尊重原创:http://www.cnblogs.com/ityouknow/p/8440455.html 上一篇文章<springboot(十九):使用Spring Boot Actuator监 ...
- 实际项目中,看 ECharts 和 HighCharts 渲染性能对比,表面看衣装,本质看内功!!!
最近做项目,使用的是echarts显示图表数据,但是数据量比较多的时候,有卡顿的情况.后来同事拿echarts和HighCharts做了对比,仅供大家参考.同时感谢同事做的工作. 一.查询1天的源数据 ...
- SpringBoot启动流程分析(五):SpringBoot自动装配原理实现
SpringBoot系列文章简介 SpringBoot源码阅读辅助篇: Spring IoC容器与应用上下文的设计与实现 SpringBoot启动流程源码分析: SpringBoot启动流程分析(一) ...