Python学习:一个简单的登录系统演示了如何使用Python处理JSON数据来管理用户信息

闲来无事,学习一下python

AI里搜索:python做一个登录系统json添加删除读取修改

以下是过程和结果:

'''
@Python学习
@环境,window10,Python 3.10.6,pip 24.0
@一个简单的登录系统演示了如何使用Python处理JSON数据来管理用户信息
@实现登录系统管理用户的基本功能:增删查改登录
@根据AI生成的代码,修改成自己想要的代码,效率确实提高了
@Author:MIKE <1515544573@qq.com>
@2024-5-27'''
import json
import getpass
import hashlib#配置信息
USER_DATA_FILE = 'user.json'def has_password(password):return hashlib.sha256(password.encode('utf-8')).hexdigest()# 用户信息结构体
class User:def __init__(self, id, username, password):self.id  = idself.username = usernameself.password = has_password(password)# 登录系统类
class LoginSystem:def __init__(self, filepath=USER_DATA_FILE):self.filepath = filepathself.load_users()def load_users(self):    try:with open(self.filepath,'r') as file:self.users = {user['id']: user for user in json.load(file)}except FileNotFoundError:self.users = {}# 添加用户def add_user(self, user):#print(user)#return Falseif user.id in self.users:print(f"用户ID {user.id} 已存在。")else:self.users[user.id] = user.__dict__self.save_users()print(f"用户 {user.username} 添加成功!")# 删除用户def delete_user(self, user_id):try:if user_id in self.users:self.users.pop(user_id)self.save_users()print(f"用户ID {user_id} 已被删除!")return Trueelse:print(f"用户ID {user_id} 不存在")return Falseexcept FileNotFoundError:print(f"用户ID {user_id} 不存在。")return False# 保存用户信息def save_users(self):with open(self.filepath,'w') as file:json.dump(list(self.users.values()),file)def change_password(self, user_id, new_password):if user_id in self.users:self.users[user_id]['password'] = has_password(new_password)self.save_users()print(f"用户ID {user_id} 的密码已修改")else:print(f"用户ID {user_id} 不存在")def show_users(self):print(self.users)return False# 用户登录def login(self, username, password):try:for user in self.users.values():if user['username'] == username and user['password'] == has_password(password):print("登录成功!")return True    print("用户名或者密码错误。")return Falseexcept FileNotFoundError:print("用户不存在,请先注册。")return False#主菜单
def main_menu():# 使用示例system = LoginSystem()# 添加用户# 登录验证# 修改密码# 删除用户# 查看用户print("1. 添加用户")print("2. 登录验证")print("3. 修改密码")print("4. 删除用户")print("5. 查看用户")choice = input("请选择(1/2/3/4/5):")if choice == '1':user_id = input("用户ID:")username = input("用户名:")password = getpass.getpass("密码:")# 添加用户system.add_user(User(id=user_id, username=username, password=password))elif choice == '2':username = input("用户名:")password = getpass.getpass("密码:")# 登录验证system.login(username,password)elif choice == '3':user_id = input("用户ID:")password = input("请输入新密码:")# 修改密码system.change_password(user_id,password)elif choice == '4':user_id = input("请输入要删除的用户ID:")choice = input("请想要删除账号吗?(y/N)")if choice.lower() == 'y':# 删除用户system.delete_user(user_id)else:return Falseelif choice == '5':system.show_users()else:print("无效选项,退出。")#执行
if __name__ == "__main__":main_menu()'''import json# 用户信息结构体
class User:def __init__(self, id, username, password):self.id = idself.username = usernameself.password = password# 登录系统类
class LoginSystem:def __init__(self, filepath='users.json'):self.filepath = filepathself.load_users()# 加载用户信息def load_users(self):try:with open(self.filepath, 'r') as file:self.users = {user['id']: user for user in json.load(file)}except FileNotFoundError:self.users = {}# 添加用户def add_user(self, user):if user.id in self.users:print(f"用户ID {user.id} 已存在。")else:self.users[user.id] = user.__dict__self.save_users()print(f"用户 {user.username} 添加成功。")# 删除用户def delete_user(self, user_id):if user_id in self.users:self.users.pop(user_id)self.save_users()print(f"用户ID {user_id} 已删除。")else:print(f"用户ID {user_id} 不存在。")# 保存用户信息def save_users(self):with open(self.filepath, 'w') as file:json.dump(list(self.users.values()), file)# 修改用户密码def change_password(self, user_id, new_password):if user_id in self.users:self.users[user_id]['password'] = new_passwordself.save_users()print(f"用户ID {user_id} 的密码已修改。")else:print(f"用户ID {user_id} 不存在。")# 登录验证def login(self, username, password):for user in self.users.values():if user['username'] == username and user['password'] == password:print("登录成功。")return Trueprint("用户名或密码错误。")return False# 使用示例
system = LoginSystem()# 添加用户
system.add_user(User(id='001', username='user1', password='pass1'))# 登录验证
system.login('user1', 'pass1')# 修改密码
system.change_password('001', 'new_pass1')# 删除用户
system.delete_user('001')在这个示例中,我们定义了一个User类来表示用户信息,以及一个LoginSystem类来管理用户的添加、删除、读取和修改。用户信息以JSON格式存储在文件中,使得系统重启后用户数据仍然保留。这个简单的登录系统演示了如何使用Python处理JSON数据来管理用户信息。提示:AI自动生成,仅供参考python做一个登录系统json添加删除读取修改'''

以上代码登录系统的文件保存在user.py,用户信息存储在user.json中,两个文件在同一个目录。思考:如果是多个文件,多个类,怎么调用,用数据库存储要如何实现,就像一个cms系统那样,下一步再研究

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/17154.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

06.部署jpress

安装mariadb数据 yum -y install mariadb-server #启动并设置开启自启动 systemctl start mariadb.service systemctl enable mariadb.service数据库准备 [rootweb01 ~]# mysql Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id…

OpenAI 再次刷新认知边界:GPT-4 颠覆语音助手市场,流畅度直逼真人互动?

前言 近日&#xff0c;美国人工智能研究公司 OpenAI 发布了其最新旗舰模型 GPT-4o&#xff0c;这一革命性的进展不仅标志着人工智能领域的新突破&#xff0c;更预示着即将步入一个全新的交互时代&#xff1f;GPT-4o 的发布&#xff0c;对于我们来说&#xff0c;意味着人工智能…

冯喜运:5.28黄金今日走势分析及黄金原油操作策略

【黄金消息面分析】&#xff1a;周一&#xff08;5月27日&#xff09;美盘时段&#xff0c;现货黄金止跌回稳&#xff0c;缓慢回升&#xff0c;盘中最高触及2358.4美元。美国商品期货交易委员会(Commodity Futures Trading Commission)的最新交易数据显示&#xff0c;对黄金的投…

数据流的中位数 - LeetCode 热题 76

大家好&#xff01;我是曾续缘&#x1f619; 今天是《LeetCode 热题 100》系列 发车第 76 天 堆第 3 题 ❤️点赞 &#x1f44d; 收藏 ⭐再看&#xff0c;养成习惯 数据流的中位数 中位数是有序整数列表中的中间值。如果列表的大小是偶数&#xff0c;则没有中间值&#xff0c;中…

Deploy Tomcat for Centos 7

介绍 Tomcat 是一个免费的开放源代码的Web 应用服务器&#xff0c;属于轻量级应用服务器&#xff0c;在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c;是开发和调试JSP程序的首选。 Tomcat 是Apache软件基金会&#xff08;Apache Software Foundation&…

空压机的热回收原理介绍

空压机运行时会产生大量的压缩热&#xff0c;通常这部分能量通过机组的风冷或水冷系统释放到大气当中。压缩机的热回收是持续降低空气系统损耗&#xff0c;提高客户生产力的必要手段。 余热回收的节能技术目前研究很多&#xff0c;但大多只针对喷油螺杆式空压机的油路改造而言…

笔试---C++

1.class和struct的默认权限分别是什么&#xff1f; class:private struct:public 2.const和static的作用&#xff0c;说的越多越好 const的了解-CSDN博客 static的了解-CSDN博客 3.c语言中链表 struct node{ int value; struct node * next; } typedef struct node node…

Eureka全面解析:轻松实现高效服务发现与治理!

一、引言 Eureka是Netflix开源的一款服务发现框架&#xff0c;它提供了一种高效的服务注册和发现机制&#xff0c;适用于大规模分布式系统。本文将详细介绍Eureka的相关知识。 二、Eureka简介 Eureka是一个基于REST的服务发现框架&#xff0c;它提供了一种简单的服务注册和发…

如果创办Google

本文是一篇演讲稿&#xff0c;来自于《黑客与画家》一书的作者保罗*格雷厄姆&#xff0c;被称为硅谷创业之父。这是他为14至15岁的孩子们做的一次演讲&#xff0c;内容是关于如果他们将来想创立一家创业公司&#xff0c;现在应该做些什么。很多学校认为应该向学生们传授一些有关…

父子组件传值

&#xff08;1&#xff09;子组件通过prop接受父组件通过v-bind传递过来的值 &#xff08;2&#xff09;遵循单向数据流的原则&#xff0c;只能在父组件对值进行修改&#xff0c;子组件不可以对父组件中值进行修改 &#xff08;3&#xff09;在子组件通过$emit自定义事件将想要…

ADS基础教程15 - 设计加密保护IP

设计加密保护IP 一、引言二、IP的生成与调用1.IP生成2.IP的调用 一、引言 介绍如何ADS中如何对设计好的原理图进行加密形成IP&#xff0c;然偶进行调用的过程。 二、IP的生成与调用 1.IP生成 (1)选择一个已经调试好的原理图&#xff0c;在菜单栏中选择Tools–>Encode De…

2024-05-27 服务器开发-轻量级c++日志-实现

摘要: 2024-05-27 服务器开发-轻量级c日志-实现 logger.h #ifndef HDLOG_H #define HDLOG_H#pragma once#ifdef _WIN32 #include <windows.h> #include <io.h> #else //#include <chrono>#include <sys/time.h>#include <memory> #include <…

python中import的搜索路径

文章目录 前言 一 python中import的搜索路径1. python中import的搜索路径先判断是否内置模块根据sys.path查找1.1 脚本当前目录和所属项目目录1.2 环境变量1.3 标准库1.4 .pth 文件1.5 第三方库 2. 解决ModuleNotFoundError 前言 码python时经常会遇到找不到包或者找不到模块的…

【杂记-利用TCP协议传输数据始末详解】

一、三次握手前&#xff1a; 1、使用TCP协议的原因 TCP协议的目的是为了保证数据能在两端准确、连续的传输。 2、实现多设备传输的基础 TCP协议可使一个设备能同时与多个设备交互信息&#xff0c;它必须要保证不同传输通道之间不会产生串联或相互影响&#xff0c;所以TCP使用S…

OpenWrt 23.05 安装之后默认空间小 磁盘扩容 教程 软路由实测 系列六

1 安装fdisk opkg update opkg install fdisk #查看磁盘 rootOpenWrt:~# fdisk -l GPT PMBR size mismatch (246303 ! 250069679) will be corrected by write. The backup GPT table is not on the end of the device. Disk /dev/sda: 119.24 GiB, 128035676160 bytes, 25006…

SpringCloud配置文件bootstrap不生效问题解决

解决方案&#xff1a; 情况一、SpringBoot 版本 小于 2.4.0 版本&#xff0c;添加以下依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-context</artifactId> </dependency> 情况二、SpringBoot…

开源远程协助:分享屏幕,隔空协助!

&#x1f5a5;️ 星控远程协助系统 &#x1f5b1;️ 一个使用Java GUI技术实现的远程控制软件&#xff0c;你现在就可以远程查看和控制你的伙伴的桌面&#xff0c;接受星星的指引吧&#xff01; 支持系统&#xff1a;Windows / Mac / Linux &#x1f31f; 功能导览 &#x1f…

java-求质数问题

在 Java 中求质数是一个经典的问题&#xff0c;它可以很好地展示编程技巧和数学知识。质数是只有两个正因数&#xff1a;1 和它本身的数。例如&#xff0c;2、3、5、7、11、13 等都是质数。在计算机科学中&#xff0c;质数有着广泛的应用&#xff0c;比如在密码学、公共密钥加密…

521源码-免费源码下载-免费学习教程-常见的原生js封装ajax

更多 网站源码 学习教程 游戏源码&#xff0c;请点击&#x1f449;-521源码-&#x1f448;获取最新资源 请看以下案例&#xff1a; function ajax(options) {var xhr null;var type GET;var params formsParams(options.data);if(typeof options.type ! undefined){type o…

【Flutter】KeyAnimatedList组件

&#x1f525; 本文由 程序喵正在路上 原创&#xff0c;CSDN首发&#xff01; &#x1f496; 系列专栏&#xff1a;Flutter学习 &#x1f320; 首发时间&#xff1a;2024年5月28日 &#x1f98b; 欢迎关注&#x1f5b1;点赞&#x1f44d;收藏&#x1f31f;留言&#x1f43e; 目…