当前位置: 首页 > news >正文

界面开发(3)--- PyQt5用户登录界面连接数据库

文章目录

    • 数据库
    • 账户注册
    • 账号登录
    • 找回密码

为了实现用户登录界面的登录功能,我们必须建立一个数据库,并把账号和对应的密码,存储到数据库中。如果输入的账号和密码与数据库中的一致,那我们就允许用户登录,进入新的界面。

上篇文章介绍了如何使用PyQt5制作用户登录界面,这篇文章在此基础上展开,建立简单数据库,实现账号登录、账户注册以及找回密码的功能。

数据库

数据库是一个按数据结构来存储和管理数据的计算机软件系统。在 python 语言中,常用的数据库有两种:

  1. 一种是 pymysql,就是使用 python 连接 Mysql 数据库;
  2. 另一种是 python 语言自带的数据库 SQLite3,无需安装,直接使用,方便快捷!

我们这里使用 SQLite3,首先建立数据库user,并加入字段 user_id 与 password,代码如下。这样就建立好基础数据库了

import sqlite3# 连接到SQLite数据库,建立数据库文件mrsoft.db,如果文件不存在,自动建立。
conn = sqlite3.connect('mrsoft.db')
# 创建一个cursor(游标)
cursor = conn.cursor()# 执行一条SQL语句,创建user,包括账号user_id与密码password
cursor.execute('create table user (user_id varchar(30) primary key, password varchar')# 关闭游标
cursor.close()# 提交事务
conn.commit()
# 关闭connection
conn.close()

账户注册

账号注册首先要读取 lineEdit 中输入的字符串,如果输入的账号在数据库中已存在,或者两次输入的密码不一致,再或者输入为空,则提示注册失败;否则就可以成功注册。

在这里插入图片描述

  • 连接数据库,获取输入的账号和两次密码
  • 判断两次输入密码是否一致
  • 判断账号是否已被注册
  • 账号注册成功
import sqlite3conn = sqlite3.connect("./database/mrsoft.db")
cursor = conn.cursor()
user_id = self.lineEdit.text()  # 获取账号
password = self.lineEdit_2.text()  # 获取密码
confirm = self.lineEdit_3.text()   # 确认密码# 如果两次输入密码一致都不为空
if password == confirm and password and user_id:if self.id_exist(user_id):QMessageBox.information(self, "提示", "该用户名已存在!",QMessageBox.Ok)else:# sql语句,符合条件的给数据库中加入新的账号和密码sql = 'insert into user (user_id, password, authority) values (?, ?, "普通用户")'cursor.execute(sql, (user_id, password))QMessageBox.information(self, "提示", "注册成功!",QMessageBox.Ok)
# 如果两次输入密码不一致,发出提示
elif password != confirm:QMessageBox.information(self, "提示", "两次输入的密码不一致,请重新输入!",QMessageBox.Ok)
# 其他情况,报错
else:QMessageBox.information(self, "提示", "输入错误!",QMessageBox.Ok)
conn.commit()
cursor.close()
conn.close()# 检验注册的账户是否存在
def id_exist(self, user_id):conn = sqlite3.connect("./database/mrsoft.db")cursor = conn.cursor()user_id = self.lineEdit.text()  # 获取账号# 从数据库中查找是否有输入的账号sql = 'select user_id from user where user_id=?'cursor.execute(sql, (user_id,))# 获取符合条件的所有信息data = cursor.fetchall()cursor.close()conn.close()# 若数据存在表示已有该账号存于数据库中if data:return Trueelse:return False

账号登录

获取输入账号,密码,与数据库中的账号密码比对,如果一致,则进入新的页面。

import sqlite3# 连接数据库
conn = sqlite3.connect("./database/mrsoft.db")
cursor = conn.cursor()
user_id = self.lineEdit.text()   # 获取账号
password = self.lineEdit_2.text()  # 获取密码
# sql语句,判断数据库中是否拥有这账号和密码
sql = 'select user_id, password, authority from user where user_id=? and password=? and authority=?'
cursor.execute(sql, (user_id, password, self.authority))
# 获取一致的部分,存在表示输入正确,不存在提示错误
data = cursor.fetchall()
# 账号和密码不为空时候,才进入
if user_id or password:if data:self.core_page.show()else:QMessageBox.information(None, "提示", "您的登录账号/密码错误!",QMessageBox.Ok)
cursor.close()
conn.close()

找回密码

获取输入的账号和密码,如果账户不存在,提示用户名不存在。如果两次输入的密码一样且不为空,并且账户名存在,则执行密码重置功能。

在这里插入图片描述

import sqlite3conn = sqlite3.connect("./database/mrsoft.db")
cursor = conn.cursor()
user_id = self.lineEdit.text()  # 获取账号
password = self.lineEdit_2.text()  # 获取密码
confirm = self.lineEdit_3.text()  # 确认密码
if password == confirm and password and user_id:# 判断账号是否存在,如存在则更改密码,否则报错if self.id_exist():sql = 'update user set password=? where user_id=?'cursor.execute(sql, (password, user_id))QMessageBox.information(self, "提示", "密码已更改!",QMessageBox.Ok)else:QMessageBox.information(self, "提示", "该用户名不存在!",QMessageBox.Ok)
elif password != confirm:QMessageBox.information(self, "提示", "两次输入的密码不一致,请重新输入!",QMessageBox.Ok)
else:QMessageBox.information(self, "提示", "输入错误!",QMessageBox.Ok)
conn.commit()
cursor.close()
conn.close()# 检验注册的账户是否存在
def id_exist(self, user_id):conn = sqlite3.connect("./database/mrsoft.db")cursor = conn.cursor()user_id = self.lineEdit.text()  # 获取账号# 从数据库中查找是否有输入的账号sql = 'select user_id from user where user_id=?'cursor.execute(sql, (user_id,))# 获取符合条件的所有信息data = cursor.fetchall()cursor.close()conn.close()# 若数据存在表示已有该账号存于数据库中if data:return Trueelse:return False

日常学习记录,一起交流讨论吧!侵权联系~

相关文章:

界面开发(3)--- PyQt5用户登录界面连接数据库

文章目录数据库账户注册账号登录找回密码为了实现用户登录界面的登录功能,我们必须建立一个数据库,并把账号和对应的密码,存储到数据库中。如果输入的账号和密码与数据库中的一致,那我们就允许用户登录,进入新的界面。…...

以下真的没有任何要写的了,我需要凑字数,请大家原谅

以下真的没有任何要写的了,我需要凑字数,请大家原谅!!!!!!!!!!!!!!!&#…...

2023年 Java 发展趋势

GitHub 语言统计表明,Java在编程语言中排名第二,而在2022年的TIOBE指数中,Java排在第四。 抛开排名,Java是自诞生以来企业使用率最高的编程语言,作为一种编程语言,它比许多竞争对手都有更多的优点&#xf…...

Lsof命令介绍

LSOF(List Open Files)是一款功能强大的开源工具,用于列出当前系统上打开的文件和进程。该工具可以帮助系统管理员和开发人员快速查找正在使用某个文件的进程,以及在系统上使用磁盘空间最多的进程。 本文将介绍LSOF的基本用法和常…...

LeetCode题目笔记——1487. 保证文件名唯一

文章目录题目描述题目链接题目难度——中等方法一:哈希表代码/Python代码/C总结题目描述 给你一个长度为 n 的字符串数组 names 。你将会在文件系统中创建 n 个文件夹:在第 i 分钟,新建名为 names[i] 的文件夹。 由于两个文件 不能 共享相同…...

【概念辨析】结构体内存对齐

一、什么是结构体内存对齐 是使得结构体的每个成员能够在及其访问的特定存储单元上的一种方法。 通过这种方法可以使得机器访问效率加快&#xff0c;也可以使得平台一致性变高。 二、结构体对齐的规则 有两组代码&#xff1a; #define _CRT_SECURE_NO_WARNINGS#include <…...

pg mysql oracle 中的schema

1、schema。 pg中的schema表示当前db中数据库对象的命名空间(namespace)&#xff0c;数据库对象包括但不限于表、函数、视图、索引等。 对于熟悉mysql的人来说&#xff0c;在第一次看到pg中的schema的概念时&#xff0c;可能会疑惑&#xff0c;schema不是表示database的吗&…...

电脑快捷方式删除文件后四种找回方法

快捷指令是一种用作替代快捷键操作的技术。也可以称为“快捷键”&#xff0c;“快捷方式”或“快捷键序列”&#xff0c;它们允许用户在非常快速和方便的方式建立特定操作序列&#xff0c;这对于执行重复性或提高效率非常有用。通过使用快捷指令&#xff0c;您可以执行快速复制…...

Session会话管理

会话管理Web会话管理概述常见的Web应用会话管理方式基于Server端的Session的管理方式基于Cookie的Session的管理方式Cookie与Session最大的区别Cookie-Based的管理方式基于Token-Based的管理方式Web会话管理的安全问题Web会话管理概述 会话管理&#xff1a;在进行人机交互的时…...

极智开发 | ubuntu源码编译cuda版opencv

欢迎关注我的公众号 [极智视界],获取我的更多经验分享 大家好,我是极智视界,本文介绍一下 ubuntu源码编译cuda版opencv。 邀您加入我的知识星球「极智视界」,星球内有超多好玩的项目实战源码下载,链接:https://t.zsxq.com/0aiNxERDq 如果你需要源码编译cpu版的opencv可以…...

umi学习(umi4)

umi 官方文档 官方建议使用 pnpm node版本在 14 以上 创建项目&#xff1a; 根据 包管理工具不同 &#xff0c;官方推荐 这里使用 pnpm&#xff1a; 1. pnpm dlx create-umilatest 2. 选择模板 &#xff08;这里使用 Simple App&#xff09; 想对module处理需要使用 Ant Desig…...

EasyPoi的excel模板预览与下载、导出简单/复杂数据

官方文档地址&#xff1a;easypoi官网&#xff0c;官方仅供参考&#xff0c;部分描述有问题 excel模板预览 准备工作 事先将整理好的excel模板存在项目中&#xff0c;如图 excel模板预览代码 GetMapping("excel")ApiOperation("excel预览")NoLogpubli…...

收个滴滴Offer:从小伙三面经历,看看需要学点啥?

说在前面 在尼恩的&#xff08;50&#xff09;读者社群中&#xff0c;经常有小伙伴&#xff0c;需要面试大厂。 后续结合一些大厂的面试真题&#xff0c;给大家梳理一下学习路径&#xff0c;看看大家需要学点啥&#xff1f; 这里也一并把题目以及参考答案&#xff0c;收入咱…...

Spark Shuffle解析

1 Shuffle的核心要点 1.1 ShuffleMapStage与ResultStage ShuffleMapStage与ResultStage 在划分stage时&#xff0c;最后一个stage称为finalStage&#xff0c;它本质上是一个ResultStage对象&#xff0c;前面的所有stage被称为ShuffleMapStage。 ShuffleMapStage的结束伴随着…...

Qt 解决程序全屏运行弹窗引发任务栏显示

文章目录摘要在VM虚拟机器中测试setWindowFlags()关键字&#xff1a; Qt、 Qt::WindowStayOnTopHint、 setWindowFlags、 Qt::Window、 Qt::Tool摘要 今天眼看项目就要交付了&#xff0c;结果在测试程序的时候&#xff0c;发现在程序全品情况下&#xff0c;点击输入框&#x…...

【进阶】2、搭建K8s集群【v1.23】

[toc] 一、安装要求 在开始之前&#xff0c;部署Kubernetes集群机器需要满足以下几个条件&#xff1a; 一台或多台机器&#xff0c;操作系统 CentOS7.x-86_x64硬件配置&#xff1a;2GB或更多RAM&#xff0c;2个CPU或更多CPU&#xff0c;硬盘30GB或更多集群中所有机器之间网络…...

11面向接口编程(下):一切皆服务,服务基于协议

服务容器的实现 一个服务容器主要的功能是&#xff1a;为服务提供注册绑定、提供获取服务实例&#xff0c;所以服务容器至少有两个方法&#xff1a;注册方法 Bind、获取实例方法 Make。 对于注册的方法&#xff0c;直接将一个服务提供者注册到容器中&#xff0c;参数是之前定…...

不要以没时间来说测试用例写不好

工作当中,总会有人为自己的测试用例写得不够好去找各种理由,时间不够是我印象当中涉及到最多的,也是最反感。想写好测试用例&#xff0c;前提是测试分析和需求拆解做的足够好&#xff0c;通过xmind或者UML图把需求和开发设计提供的产品信息提炼出来。 我个人的提炼标准一般是&…...

day57-day58【代码随想录】二刷数组

文章目录前言一、螺旋矩阵||&#xff08;力扣59&#xff09;二、螺旋矩阵&#xff08;力扣54&#xff09;三、顺时针打印矩阵&#xff08;剑指 Offer29&#xff09;四、在排序数组中查找元素的第一个和最后一个位置&#xff08;力扣34&#xff09;【二分查找】五、有多少小于当…...

【NLP】自动化计算文本文件TTR的bash脚本

自动化计算文本文件TTR的bash脚本 简介 这是一个可以计算文本文件TTR的bash脚本&#xff0c;文件名为&#xff1a;calculate_TTR.sh。它会接收一个文件名作为参数&#xff0c;并输出总单词数、特异单词数和TTR。 TTR是什么 TTR&#xff08;Type-Token Ratio&#xff09;是用…...

保姆级教程:在ArcGIS Pro插件中集成你的自定义工具箱(以‘消除重复要素’为例)

从脚本到按钮&#xff1a;ArcGIS Pro插件开发实战指南 在GIS日常工作中&#xff0c;我们常常会遇到一些重复性的数据处理任务。比如数据质检环节的"消除重复要素"操作&#xff0c;虽然可以通过Python脚本实现&#xff0c;但每次都需要打开IDE或Python窗口执行代码&am…...

小说下载器终极指南:一站式解决100+网站小说保存难题

小说下载器终极指南&#xff1a;一站式解决100网站小说保存难题 【免费下载链接】novel-downloader 一个可扩展的通用型小说下载器。 项目地址: https://gitcode.com/gh_mirrors/no/novel-downloader 在数字阅读时代&#xff0c;你是否曾因小说突然下架、网站404或网络中…...

三十岁想从零转行现实吗?带你分辨真正有前景的好工作

![](https://img-blog.csdnimg.cn/direct/b0bfa28b59f9478dae4e6feee6659cce.png)我是29岁那年&#xff0c;完成从转行裸辞副业的职业转型。 如果你把职业生涯看成是从现在开始30岁&#xff0c;到你退休那年&#xff0c;中间这么漫长的30年&#xff0c;那么30岁转行完全来得及…...

录音会议纪要整理不同使用场景,实用口碑选择建议

针对不同场景的录音整理需求&#xff08;短录音、中长录音、长内容深度整理&#xff09;&#xff0c;本文基于实际使用体验&#xff0c;分享不同场景下的工具选择建议与使用心得。一、场景一&#xff1a;短录音&#xff08;15-60分钟&#xff0c;发音清晰&#xff09;典型场景&…...

3步解锁专业级MMD创作:Blender插件如何重塑二次元动画工作流

3步解锁专业级MMD创作&#xff1a;Blender插件如何重塑二次元动画工作流 【免费下载链接】blender_mmd_tools MMD Tools is a blender addon for importing/exporting Models and Motions of MikuMikuDance. 项目地址: https://gitcode.com/gh_mirrors/bl/blender_mmd_tools …...

大佬推荐的网络安全学习路线(从基础到高级,超级详细)

大佬推荐的网络安全学习路线&#xff08;从基础到高级&#xff0c;超级详细&#xff09; 说起网络安全&#xff0c;你可能会担心它是一个过时的行业。有人说&#xff0c;网络安全快卷死了&#xff0c;你既要攻又要防&#xff0c;并且随着技术的发展&#xff0c;你还要不断地学…...

在Hermes Agent项目中接入Taotoken作为自定义模型供应商

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 在Hermes Agent项目中接入Taotoken作为自定义模型供应商 基础教程类&#xff0c;针对使用Hermes Agent框架的开发者&#xff0c;详…...

告别漫长等待:UE5.2.1 Windows打包效率优化与插件问题排查指南

告别漫长等待&#xff1a;UE5.2.1 Windows打包效率优化与插件问题排查指南第一次点击"打包项目"按钮时&#xff0c;进度条仿佛被冻结的场景&#xff0c;每个UE5开发者都经历过。尤其当项目规模达到数十GB时&#xff0c;等待时间可能超过一小时——这背后隐藏着引擎底…...

告别依赖冲突:在Debian12上为特定项目搭建Python2.7.18独立运行环境

告别依赖冲突&#xff1a;在Debian12上为特定项目搭建Python2.7.18独立运行环境 当现代Linux系统已全面拥抱Python3的时代&#xff0c;突然需要维护一个仅支持Python2.7的遗留项目&#xff0c;这种场景对开发者而言无异于一场噩梦。本文将带你用工程化的思维&#xff0c;在Deb…...

三步破解百度网盘限速:免费获取真实下载链接的终极指南

三步破解百度网盘限速&#xff1a;免费获取真实下载链接的终极指南 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 还在为百度网盘几十KB的龟速下载而苦恼吗&#xff1f;想要彻…...