要求

1.输入用户名密码
2.认证成功后显示欢迎信息
3.输错三次后锁定

思路

没有数据库,这里使用本地文件,一共需要两个文件:

      黑名单的文件:黑名单里检测,不让登录
     用户信息文件:将已有的用户信息存放在此文件

1.首先检测黑名单是否有该用户,如果有就强制退出程序

这里检测的方式一共有两种方式:

方式一:

 username = input('请输入用户名:')
with open(locked_file, 'r') as lock_f: # 先检测黑名单是否有用户名
lines = []
for line in lock_f.readlines():
lines.append(line.strip())
if username in lines:
sys.exit('用户 %s 已经被锁定!' % username)

方式二:

 username = input('请输入用户名:')
with open(locked_file, 'r') as lock_f: # 先检测黑名单是否有用户名
lines = []
for line in lock_f.readlines():
if len(line)==0:
continue
if username == line.strip():
sys.exit('用户 %s 已经被锁定!' % username)

2.如果检测黑名单里面没有该用户,就输入密码,然后就去用户信息文件中匹配用户名和密码

         with open(account_file,'r') as account_f: # 在用户信息文件中检测密码
flag = False
for line in account_f.readlines():
user,pawd = line.strip().split()
if username == user and password == pawd:
print("success!")
print("欢迎 %s 来到后台登录系统" %username)
flag=True
break # 退出当前for循环

3.在用户信息文件中匹配成功则成功进入系统,如果没有匹配成功就继续输入

4.继续输入的过程中对输入次数计数,当次数达到限制还没有成功匹配就将该用户加入黑名单然后退出程序。当次数没有达到限定次数然后匹配成功,就成功进入系统。

将用户名写入黑名单:

 def deny_account(username):
print("您的用户已被锁定!")
with open(locked_file,'a') as deny_f:
deny_f.write('\n'+username)

完整代码

 import sys

 account_file = 'D:\match.txt'
locked_file = 'D:\locked.txt' # 当用户输入错误操作三次将用户的用户名添加进黑名单文件
def deny_account(username):
print("您的用户已被锁定!")
with open(locked_file,'a') as deny_f:
deny_f.write('\n'+username)
# 主文件
def main():
retry_count = 0 # 计数器
retry_limit = 3 # 次数限制
while retry_count<retry_limit: # 循环输入
username = input('请输入用户名:')
with open(locked_file,'r') as lock_f: # 先检测黑名单是否有用户名
#方式一
# for line in lock_f.readlines():
# if len(line)==0:
# continue
# if username == line.strip():
# sys.exit('\033[32:lm用户 %s 已经被锁定!\033[0m' % username)
#方式二
lines = []
for line in lock_f.readlines():
lines.append(line.strip())
if username in lines:
sys.exit('用户 %s 已经被锁定!' % username)
if len(username)==0:
print('用户名不能为空,请重新输入')
continue password = input('请输入密码:')
with open(account_file,'r') as account_f: # 在用户信息文件中检测密码
flag = False
for line in account_f.readlines():
user,pawd = line.strip().split()
if username == user and password == pawd:
print("success!")
print("欢迎 %s 来到后台登录系统" %username)
flag=True
break # 退出当前for循环
if flag == False:
if retry_count<2:
print("您的用户名或密码有误,请重新输入!")
retry_count +=1
else:
print("欢迎进入后台管理系统")
break # 跳出while循环
else:
deny_account(username)
if __name__ == '__main__': # Python主文件的判断,入口处
main()

注意:

  这里目前有一个bug,这里的计数是对输入用户名的次数进行计数,而不是根据某个具体的用户名进行计数,因此这里还需要改进。各位博友有好主意的可以顶起来哦!

Python之登录接口的更多相关文章

  1. (转)python编写登录接口

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://506554897.blog.51cto.com/2823970/1907262 ...

  2. Python+request 登录接口reponse的返回值token跨py文件的传递《二》

    主要使用场景: 一般我们在进行接口测试时,依赖登录接口后reponse中的某些返回值,因此需要将login接口单独写一个py文件,另外的py文件均可调用login的reponse返回值使用.共用登录接 ...

  3. Python+request 登录接口reponse中token传递给其他接口使用,小示例介绍《一》

    要求: 1.调用登录login 2.调用通过登录接口返回的reponse中的token和uuid,实现test_create_todo接口的测试 实现: 1.login登录接口的调用,直接填写对应的U ...

  4. 8.Python编写登录接口

    1.python需安装flask,在命令行窗口输入:pip3 install flask 2.代码如下所示: from flask import Flask,request,jsonify,sessi ...

  5. Python实现登录接口

    要求: 输入用户名和密码 认证成功,显示欢迎信息 用户名3次输入错误后,退出程序 密码3次输入错误后,锁定用户名 Readme: UserList.txt 是存放用户名和密码的文件,格式为:usern ...

  6. Python作业--登录接口

    作业需求: 编写登陆接口 输入用户名密码 认证成功后显示欢迎信息 输错三次后锁定 实现思路: 1.从文件获取用户名密码 2.判断是否在黑名单中 3.验证用户名密码 成功:输出认证成功 错误:判断验证次 ...

  7. python编写登录接口

    要求: 输入用户名密码     认证成功显示欢迎信息 输错三次以后锁定 代码如下: # Author:YKwhile(True): select=input('请问是注册还是登录') if selec ...

  8. Python 编写登录接口

    流程图: 源码:

  9. python 测试登录接口只返回response200的问题

    但是使用postman测试是有json串的 后来发现postman传参是用的raw格式,raw的格式相当于json 而这里的data其实是form-data格式,需要用json的格式

随机推荐

  1. C++每次读取一行字符串输入(学习笔记) (转)

    1. 面向行的输入:getline()getline()函数读取整行,它使用通过回车键输入的换行符来确定输入结尾. cin.getline(Arr, 20) // Arr为用来输入行的数组的名称:   ...

  2. yii2之依赖注入与依赖注入容器

    一.为什么需要依赖注入 首先我们先不管什么是依赖注入,先来分析一下没有使用依赖注入会有什么样的结果.假设我们有一个gmail邮件服务类GMail,然后有另一个类User,User类需要使用发邮件的功能 ...

  3. Yii2之mailer的使用

     Mailer组件是yii框架自带的用于收发邮件的组件,无需安装,只需做一些配置即可使用,非常便捷.本文就mailer组件从配置到使用进行简单讲解.  首先在config/main.php配置如下: ...

  4. Vue源码终笔-VNode更新与diff算法初探

    写完这个就差不多了,准备干新项目了. 确实挺不擅长写东西,感觉都是罗列代码写点注释的感觉,这篇就简单阐述一下数据变动时DOM是如何更新的,主要讲解下其中的diff算法. 先来个正常的html模板: & ...

  5. Problem L

    Problem Description 在2×n的一个长方形方格中,用一个1× 2的骨牌铺满方格,输入n ,输出铺放方案的总数. 例如n=3时,为2× 3方格,骨牌的铺放方案有三种,如下图: L&qu ...

  6. linux进程资源占用高原因分析命令记录

    1.查看进程的线程: ps -eLf|egrep 'gateserver|UID' 2.跟踪线程调用: strace -p 15530 3.统计线程中函数的调用小号CPU时间: strace -p 1 ...

  7. 默认权限umask、文件系统权限、特殊权限

    第1章 权限相关错误 1.1 普通用户 ls /root/ /root  属于root 普通用户没有任何权限,所以无法查看 [oldboy@znix ~]$ ls /root/ ls: cannot ...

  8. Python-week2,第二周(基于Python3.0以上)

    1,列表 存储数据我们可以使用变量,但是当有很多个数据的时候用变量就会出现很多的局限性,所以这时候就用到了列表.列表就是中括号里每个元素使用逗号隔开.列如     [1,2,3]     这就是一个列 ...

  9. Java简单实现UDP和TCP

    TCP实现 TCP协议需要在双方之间建立连接,通过输入输出流来进行数据的交换,建立需要通过三次握手,断开需要四次挥手,保证了数据的完整性,但传输效率也会相应的降低. 简单的TCP实现 //服务端 pu ...

  10. Python爬虫小实践:爬取任意CSDN博客所有文章的文字内容(或可改写为保存其他的元素),间接增加博客访问量

    Python并不是我的主业,当初学Python主要是为了学爬虫,以为自己觉得能够从网上爬东西是一件非常神奇又是一件非常有用的事情,因为我们可以获取一些方面的数据或者其他的东西,反正各有用处. 这两天闲 ...