编写程序,满足以下三点要求:
自定义用户信息数据结构, 先新建.json文件,再把数据写入文件,然后读取出内容,利用json模块进行数据的序列化和反序列化。
数据结构例如:
{ “egon”:{“password”:“123”,‘status’:False,‘timeout’:0}, “alex”:{“password”:“456”,‘status’:False,‘timeout’:0}, }
#序列化可以理解为 :把python的对象编码转换为json格式的字符串 python ---> json dump
#反序列化可以理解为:把json格式字符串解码为python数据对象 json字符串 ---> python数据对象. load
import json
# Python 字典类型转换为 JSON 对象
data = { "egon":{"password":"123",'status':False,'timeout':0}, "alex":{"password":"456",'status':False,'timeout':0}, }
#print(type(data))
with open('data.json', 'w') as f:
json.dump(data, f)
json_str = json.dumps(data) #序列化
#print ("Python 原始数据:", repr(data))
#print (json_str)
with open('data.json', 'r') as f:
data = json.load(f)# 反序列化
print(data)
定义用户类,定义方法db,例如 执行obj.db可以拿到用户数据结构。
import json
class User:
def __init__(self):
self.user_dic=self.f_xuliehua()#读取信息
self.name=''
def xuliehua(self):
with open('data.json', 'w') as f:
json.dump(data, f)
def f_xuliehua(self):
with open('data.json','r') as f:
user_dic=json.load(f)
return user_dic
def db(self):
print(self.user_dic)
u=User()
u.db()
在该类中实现登录、退出方法,登录成功将状态(status)修改为True,退出将状态修改为False(退出要判断是否处于登录状态)。密码输入错误三次将设置锁定时间(下次登录如果和当前时间比较大于10秒即不允许登录)。
import time
import json
data = {"egon":{"password":"123",'status':False,'timeout':0},"alex":{"password":"456",'status':False,'timeout':0}, }
with open("data.json", "w") as f:
json.dump(data, f) # 序列化
class User:
def __init__(self):
self.user_dic=self.f_xuliehua()#读取信息
self.name=""
def xuliehua(self):
with open('data.json', 'w') as f:
json.dump(self.user_dic, f)
def f_xuliehua(self):
with open('data.json','r') as f:
user_dic=json.load(f)
return user_dic
def db(self):
print(self.user_dic)
def login(self):
while True:
a=input("请输入命令\n")
print("输入的命令为:",a)
if a=="q":#退出程序不然停不下来很烦
print("退出程序")
break
count=0
while a=="login":
username=input("请输入用户名:\n")
print("输入的用户名为",username)
password=input("请输入密码:\n")
print("输入的密码为",password)
if username in self.user_dic and password == self.user_dic[username]["password"]:#判断输入的值是否在json文件中
time_now = time.time() # 获取当前时间
period = time_now - self.user_dic[username]["timeout"] # 时间差
if period >= 10:
print("-----------------%s登录成功-----------------"%username)
self.username = username
self.user_dic[username]["status"] = True # 记录用户登录状态
self.xuliehua()
break
else:
print("用户处于锁定状态,请{}S后再试" .format(10 - period))
break
else:
print("用户或密码错误")
count=count+1
if count>=3:
print("---------%s用户已经被锁定--------"%username)
break
while a=="exit":
try:
if self.username: # 用户处于登录状态
self.user_dic[self.username]["status"] = False # 修改用户登录状态
self.xuliehua () # 将修改保存到文件
print("用户{}退出登录" .format(self.username))
break
except:
print("当前没有用户登录")
break
u=User()
u.login()