界面开发(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 sqlite3

conn = 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 True
	else:
	    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 sqlite3

conn = 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 True
	else:
	    return False

该专栏博文地址:

界面开发(1) — PyQt5环境配置
界面开发(2)— 使用PyQt5制作用户登陆界面
界面开发(3)— PyQt5用户登录界面连接数据库
界面开发(4)— PyQt5实现打开图像及视频播放功能
界面开发(5)— PyQt5实现打开摄像头采集视频功能

奥比中光深度相机(一) — 环境配置
奥比中光深度相机(二) — PyQt5实现打开深度摄像头功能

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

PyQt5图形界面开发中,有一些基本概念需要了解: 1. 窗口(Window):窗口是应用程序的主要界面,它是用户与应用程序交互的窗体。在PyQt5中,可以使用QMainWindow类创建主窗口,或使用其他窗口类创建自定义窗口。 2. 控件(Widget):控件是构成窗口界面的基本元素,如按钮、文本框、标签、表格等。PyQt5提供了丰富的预定义控件,也可以通过自定义控件来满足特定需求。 3. 布局管理器(Layout Manager):布局管理器用于自动调整和排列控件的位置和大小,以适应窗口的大小和分辨率变化。PyQt5提供了多种布局管理器,如水平布局(QHBoxLayout)、垂直布局(QVBoxLayout)和网格布局(QGridLayout)等。 4. 事件(Event):事件是用户与应用程序交互时产生的动作或状态变化,如鼠标点击、键盘输入等。PyQt5使用事件驱动编程模型,通过连接信号(Signal)和槽(Slot)来处理各种事件。 5. 信号与槽(Signal and Slot):信号是对象发出的通知,槽是用于处理信号的函数。在PyQt5中,可以使用QObject类的信号和槽机制来实现对象之间的通信和交互。 6. 样式表(Style Sheet):样式表可以用于设置控件的外观和样式,如字体、颜色、背景等。PyQt5支持使用CSS(层叠样式表)语法来定义控件的样式。 7. 对话框(Dialog):对话框是用于显示特定信息或与用户进行交互的窗口。PyQt5提供了各种预定义对话框,如消息框、文件选择框、颜色选择框等。 8. 绘图(Painting):绘图是在窗口上绘制图形、图表和其他图形化元素的过程。PyQt5提供了绘图工具和API,开发者可以使用它们来实现自定义的绘图功能。 9. 数据库(Database):PyQt5集成了Qt数据库模块,可以方便地进行数据库操作,如连接数据库、执行SQL查询等。 以上是PyQt5图形界面开发的一些基本概念,了解这些概念将有助于开发者理解和构建GUI应用程序。
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WYKB_Mr_Q

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值