day01 项目
项目名称:
编写登陆接口
项目需求:
1 输入用户名密码
2 认证成功后显示欢迎信息
3 输错3次之后锁定,包括下次运行此程序也要锁定,涉及到持久化的问题只能用python 自带的文件输入输出接口 不能用系统级的接口
折腾了一天终于写出来了,主要是第三个需求中的持久化,我试了 file 的读写,还有pickle ,anydbm 发现都不成功,提示了很多报错,可能是我是小白的原因吧,最后我找到了json 这个官方的模块,使用了一下发现很不错,当然他也是在file 中操作的。
file 我是通过python 的官方手册里查找使用方法的,json 是通过百度得到的方法的。
python 的官方手册地址:https://docs.python.org/3/tutorial/index.html 这个以后要用到了,先标记一下。
下面是show code time : # getpass 在Pychram 中有问题,请在真实python 环境中运行,例如可以保存到linux 中运行。
1 #!/usr/bin/env python3 2 # Auth: Shen Yang 3 import json 4 import getpass 5 6 vaild_user = {'yang': '123','lu': '321'} #定义可以登陆的用户及密码 7 black_list_file_path = "e://Python-study/black_list.db" #定义黑名单路径 8 9 try: # 使用try 来判断文件是否存在,如果不存在说明是第一次运行或者没有被blok 的用户,初始化用户名及密码输入错误次数 10 black_list_file = open(black_list_file_path,"r") # 使用file 以读的方式打开文件 11 black_list = json.load(black_list_file) #使用json 来载入文件存入的字典 12 black_list_file.close() # 关闭文件 13 except FileNotFoundError : 14 black_list = {"lu": 0, "yang": 0} 15 16 while True: #循环执行输入名字 17 input_user = input("please input your name: ") 18 if input_user in vaild_user: #判断输入的用户是否在可以登陆的名单里 19 if black_list[input_user] == 3: # 判断用户是否已经输错密码3次 20 print("User {_input_user} is locked !".format(_input_user=input_user)) 21 break 22 input_passwd = getpass.getpass("please input your passwd: ") 23 if input_passwd == vaild_user[input_user]: #判断密码是否正确 24 print(28 * "+") 25 print("Welcome {_input_user} to your server!".format(_input_user=input_user)) 26 print(28 * "+") 27 break 28 else: # 密码不正确 29 print("Invalid passwd") 30 black_list[input_user] += 1 # 密码输入错误次数每次 + 1 31 if black_list[input_user] == 3: # 如果密码错误次数等于3 ,输出锁定信息并修改密码错误次数为3,下次登陆会先判断此值 32 print("User {_input_user} is locked !".format(_input_user=input_user)) 33 black_list_file = open(black_list_file_path,"w") # 使用file 以写的模式打开文件 34 json.dump(black_list,black_list_file) # 使用json 来把字典持久化到文件中 35 black_list_file.close() # 关闭文件 36 break 37 else: # 判断输入的用户不在定义里输出错误信息并退出 38 print("User {_input_user} is not allowd in our system! bayby...".format(_input_user=input_user)) 39 break