作业:编写登录接口
* 没有用户时,指导用户创建用户名和密码
* 已有用户时,指导用户输入用户名密码进行登录
* 认证成功后显示欢迎信息,若用户名为Admin,提示管理员登录信息,反之为普通用户登录信息
* 登录错误三次将该用户限制登录,管理员(Admin)除外
* 管理员可以取消用户登录限制
* 项目请采用终端演示,不要采用pycharm(pycharm对面密码密文不支持)
python代码如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# -*- versison: Python 3.6.5 -*-
#Auther JCL
import json
import getpass
user_file_name = 'user.json'
pass_file_name = 'pass.json'
fail_file_name = 'user_control.json'
with open(user_file_name,'r') as f_ob_1: #file ==> memory
user_list_str = f_ob_1.read() #memory ==>str
user_list = eval(user_list_str) #str ==> list
with open(pass_file_name,'r') as f_ob_2: #file ==> memory
pass_list_str = f_ob_2.read() #memory ==>str
pass_list = eval(pass_list_str) #str ==> list
with open(fail_file_name,'r') as f_ob_3:
user_fail_control_str = f_ob_3.read()
user_fail_control = eval(user_fail_control_str) #str ==> list
menu = int(input("0. 登陆用户\n1. 创建用户")) #菜单
if menu == 0:
active = 0
login_user = input("请输入你的用户名:")
while active < 3:
login_user_dict_1 = {login_user:0} #str ==>dict
if login_user_dict_1 not in user_list:
print("用户名不存在,请重新输入")
break
login_user_dict_2 = {login_user:3}
if login_user_dict_2 in user_fail_control:
print("该用户登录次数过多,已经被限制登录,请联系管理员处理")
break
login_passwd = getpass.getpass("请输入你的密码:")
user_control = {login_user.lower(): 0} # user info And control info ==> dict
pass_control = {login_user.lower():login_passwd}
if user_control in user_list and pass_control in pass_list and login_user == 'admin':
print("Welcome To Login In SpuerAdmin Sir !")
#取消用户限制控制区域 start==>
cancel_control_list = []
for cancel_list in user_fail_control:
for x, y in cancel_list.items():
cancel_control_list.append(x)
print(cancel_control_list)
cancel_control = input("请输入您要取消限制登录的用户名:")
if cancel_control not in cancel_control_list:
print("您输入的用户名有误")
else:
user_fail_control.remove({cancel_control:3})
user_fail_control__list_str = json.dumps(user_fail_control)
with open(fail_file_name,'w') as f:
f.write(user_fail_control__list_str)
print("用户",cancel_control,"已经可以登录!")
#stop ==> 取消用户限制控制区域
break
if user_control in user_list and pass_control in pass_list:
print("Welcome To Login In !",login_user)
break
else:
print("用户名或密码错误")
active +=1
else:
#错误登录控制区域 start==>
if login_user != 'admin':
user_fail_control_1 = {login_user:active}
user_fail_control.append(user_fail_control_1)
login_user_fail_control = json.dumps(user_fail_control)
with open(fail_file_name,'w') as f:
f.write(login_user_fail_control)
print("您的失败登录次数已超过3次,用户已被锁定,请联系管理员处理")
else:
print("您的登录次数过多,请重新登录")
#stop ==> 错误登录控制区域
if menu == 1:
active = 1
while active == 1:
create_user_name = input("请输入你要创建的用户名:")
user_control = {create_user_name.lower():0} #user info And control info ==> dict
if user_control in user_list: #匹配dict
print("用户名已存在,请输入新的用户名")
else:
create_pass_1 = getpass.getpass("请输入密码:")
create_pass_2 = getpass.getpass("请确认密码:")
if create_pass_1 == create_pass_2:
print("用户",create_user_name,"创建成功!")
break #跳出
else:
print("你两次输入的密码不匹配,创建失败!")
#存储用户名和控制信息
create_list = {create_user_name.lower():0} #info ==>dict
user_list.append(create_list) #dict +==list
json_str_user = json.dumps(user_list) #list ==> str
with open(user_file_name,'w') as f_ob_1: #file ==> memory
f_ob_1.write(json_str_user) #write
# 存储用户名和密码信息
pass_dict = {create_user_name.lower():create_pass_2} #info ==>dict
pass_list.append(pass_dict) #dict +==list
json_str_pass = json.dumps(pass_list) #list ==> str
with open(pass_file_name,'w') as f_ob_2: #file ==> memory
f_ob_2.write(json_str_pass) #write
注三个文件必须提前创建,且不能为空,初始内容如下:
user.json #初始内容
[{"admin": "123"}]
pass.json #初始内容
[{"admin": 0}]
user_control.json #初始内容
[{"default": 3}]