以下代码主要实现的是用户登录,注册,密码验证,账户锁定,重置和修改密码等功能

import pickle
#第一次运行请去掉下面一段代码的注释
'''
users_db = open("users.txt","wb")
users_list = [["admin","admin",1],["tiannan","123456",1],["jide","123",0]]
#["admin","admin",1] -> [<用户名>,<密码>,<锁(是/否)>]
pickle.dump(users_list,users_db)
users_db.close()
''' users_db=open("users.txt","rb")
users_list=pickle.load(users_db)
users_db.close()
#print(users_list) #用户登录机会
users_pass = {}
for i in users_list:
users_name = i[0]
users_pass[users_name]=3
#users_pass = {"admin":3,"tiannan":3,"jide":3} -> {<用户名>:<可尝试登录次数>}
#print(users_pass) def ha_user(user_name):
no_user = "yes"
for j, users_msg in enumerate(users_list):
#print(i,users_msg)
#判断用户名是否存在
if user_name in users_msg:
no_user = j
break
return no_user def write_db():
users_db = open("users.txt","wb")
pickle.dump(users_list,users_db)
users_db.close() def change_password():
password1 = input("请输入新密码:")
password2 = input("请再次输入新密码:")
if password1 == password2:
users_list[index][1] = password1
write_db()
print("密码修改成功!")
else:
print("您输入的密码不一致!") while True:
sel = int(input("选择:<1>登录 <2>注册\n"))
if sel == 1:
name = input("请输入用户名:")
password = input("请输入密码:") index = ha_user(name)
if index == "yes":
print("用户名不存在!")
else:
users_info = users_list[index]
#判断用户是否处于锁定状态
if users_info[-1] == 0:
print("%s用户已被锁,请联系管理员解锁账户!" % users_info[0])
else:
if password == users_info[1]:
#重置账户锁定验证次数
users_pass[name]=3
print("登录成功!")
while name == "admin":
sel2 = int(input("请选择:<1>修改密码 <2>重置用户 <3>查看用户 <4>退出\n"))
if sel2 == 1:
change_password()
elif sel2 == 2:
name2 = input("请输入需要重置的用户名:")
index3 = ha_user(name2)
if index3 == "yes":
print("用户名不存在!")
else:
users_list[index3][1]= ""
users_list[index3][-1]= 1
write_db()
print("%s用户重置成功!" % name2)
elif sel2 == 3:
name2 = input("请输入查找的用户名:")
index2 = ha_user(name2)
if index2 != "yes":
print(users_list[index2])
else:
print("该用户不存在!")
elif sel2 == 4:
break
while name != "admin":
sel3 = int(input("请选择:<1>修改密码 <2>退出\n"))
if sel3 == 1:
change_password()
elif sel3 == 2:
break
else:
users_pass[name]-=1
if users_pass[name] > 0:
print("密码错误,你还有%d次机会,请重新登录!" % users_pass[name])
else:
users_list[index][-1]=0
write_db()
print("%s用户多次登录失败,已被锁,请联系管理员解锁账户!" % users_info[0])
elif sel == 2:
name = input("请输入用户名:")
password = input("请输入密码:") result = ha_user(name)
if result == "yes":
user_list = [name,password,1]
users_list.append(user_list)
write_db()
print("注册成功!")
else:
print("该用户名已被注册!")

此代码仅供参考,欢迎各位博友的留言!

python-pickle模块使用实例的更多相关文章

  1. [转]python pickle模块

    持久性就是指保持对象,甚至在多次执行同一程序之间也保持对象.通过本文,您会对 Python对象的各种持久性机制(从关系数据库到 Python 的 pickle以及其它机制)有一个总体认识.另外,还会让 ...

  2. python pickle 模块的使用

    用于序列化的两个模块 json:用于字符串和Python数据类型间进行转换 pickle: 用于python特有的类型和python的数据类型间进行转换 json提供四个功能:dumps,dump,l ...

  3. Python pickle 模块

    转自:https://www.cnblogs.com/lincappu/p/8296078.html pickle可以存储的数据类型 所有python支持的原生类型:布尔值,整数,浮点数,复数,字符串 ...

  4. python -pickle模块、re模块学习

    pickel模块 import pickle #pickle可以将任何数据类型序列化,json只能列表字典字符串数字等简单的数据类型,复杂的不可以 #但是pickle只能在python中使用,json ...

  5. python——pickle模块的详解

    pickle模块详解 该pickle模块实现了用于序列化和反序列化Python对象结构的二进制协议. “Pickling”是将Python对象层次结构转换为字节流的过程, “unpickling”是反 ...

  6. python pickle模块的使用/将python数据对象序列化保存到文件中

    # Python 使用pickle/cPickle模块进行数据的序列化 """Python序列化的概念很简单.内存里面有一个数据结构, 你希望将它保存下来,重用,或者发送 ...

  7. Python pickle模块

    python的pickle模块实现了基本的数据序列和反序列化.通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储:通过pickle模块的反序列化操作,我们能够从文件 ...

  8. python pickle模块的用法

    pickle用于python特有的类型,和python的数据类型间进行转换,提供四个功能 dumps,dump,loads,load. pickle 的用法 #pickle.dumps 将数据通过特殊 ...

  9. python pickle 模块的使用详解

    用于序列化的两个模块 json:用于字符串和Python数据类型间进行转换 pickle: 用于python特有的类型和python的数据类型间进行转换 json提供四个功能:dumps,dump,l ...

  10. Python——pickle模块(永久存储)

    一.作用 讲字典.列表.字符串等对象进行持久化,存储到磁盘上,方便以后使用. 二.dump()方法 pickle.dump(对象,文件,[使用协议]) 作用:将要持久化的数据“对象”,保存到“文件中” ...

随机推荐

  1. C#中,switch case语句中多个值匹配一个代码块的写法

    switch (num) { case 1: Response.Write("1"); break; case 2: case 3: Response.Write("2| ...

  2. 不使用Ajax,如何实现表单提交不刷新页面

    不使用Ajax,如何实现表单提交不刷新页面? 目前,我想到的是使用<iframe>,如果有其他的方式,后续再补. 举个栗子: 在表单上传文件的时候必须设置enctype="mul ...

  3. 游戏编程系列[1]--游戏编程中RPC协议的使用

    RPC(Remote Procedure Call Protocol)--远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.RPC协议假定某些传输协议的存在 ...

  4. php登录注册页面及加载

                           php注册界面                               <h1>注册页面</h1> <form acti ...

  5. asp.net core 1.1 升级后,操作mysql出错的解决办法。

    遇到问题 core的版本从1.0升级到1.1,操作mysql数据库,查询数据时遇到MissingMethodException问题,更新.插入操作没有问题. 如果你也遇到这个问题,请参照以下步骤进行升 ...

  6. Razor 语法初级使用,不断更新此文章

    有兴趣的可以看看菜鸟教程的   http://www.runoob.com/aspnet/razor-cs-loops.html 1.ViewData展示登陆的Session信息 Controller ...

  7. 使用VS2015进行C++开发的6个主要原因

    使用VS2015进行C++开发的6个主要原因 使用Visual Studio 2015进行C++开发 在今天的 Build 大会上,进行了“将你的 C++ 代码转移至 VS2015 的 6 个原因”的 ...

  8. python 数据类型 ---字符串

    1. 字符串去除空白 ,strip() , 包括空格,tab键, 换行符 >>> name = " Frank " >>> name.strip ...

  9. 分布式任务&分布式锁(li)

    目前系统中存在批量审批.批量授权等各个操作,批量操作中可能因为处理机器.线程不同,造成刷新缓存丢失授权等信息,如批量审批同一用户权限多个权限申请后,流程平台并发的发送多个http请求到acl不同服务器 ...

  10. 面向对象设计模式纵横谈:Singelton单件模式(笔记记录)

       李建忠老师讲的<面向对象设计模式纵横谈>,早就看过了,现在有了时间重新整理一下,以前的博客[赛迪网]没有了,现在搬到博客园,重新过一遍,也便于以后浏览. 设计模式从不同的角度分类会得 ...