要求

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. jfinal编码问题及解决

    使用jfinal出现了常见的编码问题情况 public void test() { Random r = new Random(); try { Connection conn = createCon ...

  2. elasticsearch+kibana+metricbeat安装部署方法

    elasticsearch+kibana+metricbeat安装部署方法 本文是elasticsearch + kibana + metricbeat,没有涉及到logstash部分.通过beat收 ...

  3. IT 圈里有哪些经常被读错的词?

    原文链接:IT 圈里有哪些经常被读错的词? ()标相应英文单词[]标音标 =====公司/产品名===== Youtube (You-tube [tju:b]) 念 优tiu啵 不念 优吐毙Skype ...

  4. (转)UML类图与类的关系详解

    转载自:http://www.uml.org.cn/oobject/201104212.asp 在画类图的时候,理清类和类之间的关系是重点.类的关系有泛化(Generalization).实现(Rea ...

  5. 最全的命令行(gradle)打包安卓apk

    最近研究安卓方面的打包,因为是React Native,不能使用Android studio打包.找了半天资料,发现没有一个全面的.下面,我来讲解自己下打包时自己遇到的各种坑. 1.首先,需要在项目顶 ...

  6. 1087: [SCOI2005]互不侵犯King

    1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4276  Solved: 2471[Submit][ ...

  7. hadoop2 YARN/Mv2中 ApplicationMaster相关问题及介绍

    ApplicationMaster是什么? ApplicationMaster是一个框架特殊的库,对于Map-Reduce计算模型而言有它自己的ApplicationMaster实现,对于其他的想要运 ...

  8. input光标高度问题

    input输入框光标高度问题IE:不管该行有没有文字,光标高度与font-size大小一致 FF:该行没有文字时,光标大小与input的 height 大小一致:该行有文字时,光标大小与font-si ...

  9. JS是按值传递还是按引用传递?【转载】

    最近遇到个有趣的问题:“JS中的值是按值传递,还是按引用传递呢?” 在分析这个问题之前,我们需了解什么是按值传递(call by value),什么是按引用传递(call by reference). ...

  10. ⑤bootstrap表格使用基础案例

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...