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

news/2024/7/20 16:56:15/文章来源:https://blog.csdn.net/hnhdl/article/details/139242846

闲来无事,学习一下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.luyixian.cn/news_show_1053015.aspx

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

相关文章

AI办公自动化:用kimi批量将word文档部分文件名保存到Excel中

文件夹中有很多个word文档&#xff0c;现在只要英文部分的文件名&#xff0c;保存到一个Excel文件中。 可以在kimi中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;要完成一个编写Python脚本的任务&#xff0c;具体步骤如下&#xff1a; 打开文件夹&#xff1a;…

Linux IO模型深度解析与实战应用

linux的5种IO模型 一、这里IO是什么 操作系统设有用户态与内核态,确保系统安全。应用程序默认在用户态运行,而执行如IO操作等底层任务时,需切换至内核态以高效执行。 服务器从网络接收的大致流程如下: 1、数据通过计算机网络来到了网卡 2、把网卡的数据读取到 socket 缓…

将 KNX 接入 Home Assistant 之一 准备硬件

不久前有人小伙伴买了usb转knx ,详情请看 一个 usb 转 knx 的模块 然后想通过这个设备接入 Home Assistant。 后来了解了一下 Home Assistant 并不直接支持 usb转KNX的接入&#xff0c;需要通过KNXD插件转接才行。 然而尝试了很多次叶没有成功&#xff0c;使用西门子的usb接口以…

Android面试题之Kotlin常见集合操作技巧

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 list 创建和修改 不可变list,listOf var list listOf("a","d","f") println(list.getOrElse(3){"Unkn…

关于高性能滤波器和普通型滤波器的区别说明

高性能滤波器和普通型滤波器在性能和滤波效果上存在显著差异。以三安培为代表分析高性能滤波器和普通型滤波器的区别&#xff1a; 从上图曲线可看出&#xff1a; 1.高性能滤波器和普通型滤波器的滤波范围不同。普通型滤波器有效滤波范围为 150KHz~30MHz&#xff0c;而高性能滤…

蓝牙Mesh模块多跳大数据量高带宽传输数据方法

随着物联网技术的飞速发展&#xff0c;越来越多的设备需要实现互联互通。蓝牙Mesh网络作为一种低功耗、高覆盖、易于部署的无线通信技术&#xff0c;已经成为物联网领域中的关键技术之一。在蓝牙Mesh网络中&#xff0c;节点之间可以通过多个跳数进行通信&#xff0c;从而实现大…

剪画小程序:”霸屏各大平台“的黏土滤镜是怎么制作的呢?

最近&#xff0c;网上出现大量“黏土”风格的人物照片。尤其是在社交平台&#xff0c;这类型的分享数量急剧上升。 这是马斯克开车的样子 还有这张是周杰伦七里香的专辑图片 一张照片&#xff0c;十几秒钟&#xff0c;就能还原出你在黏土世界的样子。 以上这些照片是用-【剪画…

解决SpringBoot中插入汉字变成?(一秒解决)

在这里url后面加一行配置即可&useUnicodetrue&characterEncodingUTF-8即可 解释 spring.datasource.url: 这里包含了数据库的URL&#xff0c;以及额外的参数如useUnicodetrue用于启用Unicode字符集支持&#xff0c;characterEncodingUTF-8用于指定字符编码为UTF-8&…

idea2024 nacos中文报错

idea2024 nacos中文报错 报错提示为&#xff1a;Input length 1 报错原因&#xff1a;项目启动编码与nacos编码不一致。 处理方式 添加启动参数utf8修改项目编码格式为utf8 修改idea.vmoptions Help -> Edit Custom 添加一行&#xff1a;-Dfile.encodingUTF-8

Django与微服务架构:构建可扩展的Web应用

title: Django与微服务架构&#xff1a;构建可扩展的Web应用 date: 2024/5/21 20:15:19 updated: 2024/5/21 20:15:19 categories: 后端开发 tags: 微服务Django负载均衡RESTfulAPI网关容器化监控安全 前言 在当今快速发展的软件开发领域&#xff0c;微服务架构已经成为构建…

情感分析及数据集代码解析

15.1. 情感分析及数据集 — 动手学深度学习 2.0.0 documentation (d2l.ai) 代码 import os import torch from torch import nn from d2l import torch as d2l#save d2l.DATA_HUB[aclImdb] (http://ai.stanford.edu/~amaas/data/sentiment/aclImdb_v1.tar.gz,01ada507287d828…

音视频学习规划

文章目录 概述闲聊点 小结 概述 最近在学习音视频&#xff0c;觉得还是要先写个提纲&#xff0c;给自己制定下学习路线及目标。先写下我的个人流程及思路。 ffmpeg的命令ffmpeg api播放器流媒体RTMP&#xff0c;HLS 闲聊点 先说下学习命令行吧&#xff0c;学习命令行是为了…

【Spring Cloud】API网关

目录 什么是API网关为什么需要API网关前言问题列表 API网关解决了什么问题常见的网关解决方案NginxLuaSpring Cloud Netflix ZuulSpringCloud Zuul的IO模型弊端 Spring Cloud Gateway 第二代网关——GatewayGateway的特征Spring Cloud Gateway的处理流程Spring Cloud Gateway的…

基于trunk、yew构建web开发脚手架

trunk 构建、打包 rust wasm 程序&#xff1b;yewweb 前端开发库&#xff1b; 项目仓库yew-web trunk 之前已经简单介绍了trunk,全局安装&#xff1a; $> cargo install --locked trunk常用命令&#xff1a; trunk build 基于wasm-bindgen构建 wasm 程序。trunk watch …

企企通入选第一新声《2024年中国CIO数字化产品选型白皮书》供应链数字产品可信名录

近日&#xff0c;第一新声研究院根据多年产业数字化研究&#xff0c;历经近半年时间&#xff0c;并综合近200位CIO调研与推荐意见&#xff0c;发布《2024年中国CIO数字化产品选型白皮书》&#xff0c;并推出企业CIO选型指南及可信产品名录。企企通凭借其优秀的采购数字化与供应…

【小米手环7】表盘修改/制作指南

2024年了还有人用小米手环7么&#xff1f; 5月10号得到我的小米手环7nfc&#xff0c;随之开启了我对表盘制作的探索之旅。~历时18天&#xff0c;终于让我成功修改了官方表盘——荧光电子&#xff01;表盘&#xff1a;羽球人的荧光电子已上传至表盘自定义工具app。 接下来&…

Android软件渲染流程

Android软件渲染流程 一.渲染流程1.VSync信号的监听2.VSync信号触发绘制 二.渲染原理1.画布的获取1.1 渲染缓存的初始化1.2 graphics::Canvas的创建1.3 graphics::Canvas与渲染缓存的绑定1.3.1 SkBitmap的初始化1.3.2 SkiaCanvas与SkBitmap的绑定1.3.3 SkCanvas的创建 2.矩形的…

Window Linux 权限提升

#基础点&#xff1a; 0、为什么我们要学习权限提升转移技术&#xff1a; 简单来说就是达到目的过程中需要用到它 心里要想着我是谁 我在哪 我要去哪里 1、具体有哪些权限需要我们了解掌握的&#xff1a; 后台权限&#xff0c;数据库权限&#xff0c;Web权限&#xff0c;用户权…

红外成像人员检测数据集VOC+YOLO格式5838张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;5838 标注数量(xml文件个数)&#xff1a;5838 标注数量(txt文件个数)&#xff1a;5838 标注…

FTP协议——Pure-Ftpd安装(Linux)

1、简介 Pure-FTPd是一个高效、免费且开源的FTP服务器软件&#xff0c;广泛应用于各种Unix/Linux系统。它以其易用性、高安全性和功能丰富而闻名&#xff0c;适用于个人和企业的文件传输需求。 2、步骤 环境&#xff1a;Ubuntu 22.04.4 下载地址&#xff1a;Index of /pub/p…