PyQt5+SQLlite3基于邮箱验证的登陆注册找回系统

2024-06-05 21:12

本文主要是介绍PyQt5+SQLlite3基于邮箱验证的登陆注册找回系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本期教程投稿一篇实用性的基于邮箱登陆注册找回于一体的系统,在日常的开发和软件应用中非常常见,并且也使用了逻辑与界面分离的写法,那这个文章将详细的为大家介绍整个流程,但是细节的话还需要大家自己去完善,也欢迎大家把完善好的代码给我,我继续深入为大家进行讲解!

项目界面

邮件样式

项目流程

数据库中包含两张表:count(存放账号信息),code(存放验证码信息)

目录结构

[db文件夹] 存放数据库

[debug文件夹] 存放逻辑代码

[gui文件夹] 存放页面代码

[img文件夹] 存放图片

[ui文件夹] 存放ui文件

[uilt文件夹] 存放数据库位置文件

在实际的应用开发中,这种格式的存放会非常常见,但是如果是内置的data文件,使用pyinstall打包会有许多问题!(可以解决的)

注册-逻辑代码

1. 验证码生成与发送

在用户注册过程中,为了确保用户的邮箱是有效的,我们需要生成一个验证码并发送到用户的邮箱。以下是如何实现的关键点:

  • 生成验证码:使用随机数生成四位数的验证码。
  • 发送邮件:利用SMTP协议,通过邮件服务器将验证码发送到用户的邮箱。
def get_code(self):code = ""for _ in range(4):code += str(random.randint(0, 9))return code

发送邮件的主要步骤包括设置SMTP服务器信息,创建邮件内容,并发送邮件:

1. 准备工作

需要一个邮件服务器的SMTP信息和发送邮件的账户。例如,我们可以使用Gmail的SMTP服务器来发送邮件。

  • SMTP服务器:smtp.gmail.com
  • SMTP端口:465(SSL)或587(TLS)
  • 发送邮箱:你的Gmail邮箱地址
  • 邮箱密码:你的Gmail密码或应用专用密码(推荐使用应用专用密码)

2. 基本步骤

2.1 导入必要模块

首先,导入smtplib和其他需要的模块。

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
2.2 创建邮件内容

创建一个MIME对象,用于构建邮件的主题、发件人、收件人和正文。

sender_email = "your_email@gmail.com"
receiver_email = "receiver_email@example.com"
password = "your_app_password"# 创建MIME对象
message = MIMEMultipart()
message["From"] = sender_email
message["To"] = receiver_email
message["Subject"] = "这是一个测试邮件"# 邮件正文
body = "这是一封通过Python发送的测试邮件。"
message.attach(MIMEText(body, "plain"))
2.3 发送邮件

使用smtplib.SMTP_SSL或者smtplib.SMTP连接到SMTP服务器,并发送邮件。

smtp_server = "smtp.gmail.com"
smtp_port = 465  # 对于SSLtry:# 连接到SMTP服务器server = smtplib.SMTP_SSL(smtp_server, smtp_port)server.login(sender_email, password)  # 登录到SMTP服务器server.sendmail(sender_email, receiver_email, message.as_string())  # 发送邮件print("邮件发送成功")
except Exception as e:print(f"邮件发送失败: {e}")
finally:server.quit()  # 关闭连接

注意事项

  1. 安全性:为了安全起见,建议使用应用专用密码而不是直接使用邮箱密码。应用专用密码可以在Gmail账户的安全设置中生成。
  2. 邮箱设置:确保你的发送邮箱允许通过SMTP发送邮件。对于Gmail,需要开启“允许不太安全的应用”的设置,或者使用应用专用密码。

3. 验证码校验

在用户输入验证码后,我们需要校验验证码的有效性。这包括检查验证码是否匹配,以及是否在有效期内。

校验验证码的主要逻辑如下:

  • 获取当前时间:确保验证码在有效期内。
  • 匹配验证码:比较用户输入的验证码与数据库中的验证码。
  • 处理结果:根据验证码的状态(有效、过期、不匹配)给出不同的反馈。

核心校验逻辑如下:

def check_code(self):timenow = datetime.datetime.now().strftime("%Y-%m-%d %H:%M")code_input = self.lineEdit_4.text()result = self.select_code()if not code_input:QMessageBox.warning(self, '失败', '请输入验证码!!')returnif result is None:QMessageBox.warning(self, '失败', '未找到验证码记录!')returncode, expiry_time = resultif code_input == code and expiry_time >= timenow:self.insert_count(email, password)else:QMessageBox.warning(self, '失败', '验证码错误或已过期!')

4. 数据库操作

为了管理验证码和用户数据,我们需要与SQLite数据库进行交互。主要操作包括插入和查询验证码、删除过期验证码、以及插入用户数据。

插入验证码:将生成的验证码及其过期时间存入数据库。 

查询验证码:从数据库中检索当前用户的验证码记录。 

删除验证码:在验证码过期或使用后将其删除。 

插入用户数据:在用户注册成功后,将用户信息存入数据库。

def insert_code(self):# 插入验证码到数据库def select_code(self):# 从数据库查询验证码def delete_code(self):# 删除数据库中的验证码

登陆-逻辑代码

1. 项目结构

使用PyQt5来创建图形用户界面,并且结合SQLite数据库来存储和验证用户信息。项目的关键部分:

  • login_ui.py: 包含登录界面的UI设计。
  • creat_count_logic.py: 包含创建账户的逻辑。
  • main_logic.py: 包含主窗口的逻辑。
  • db.py: 包含数据库路径和相关设置。

2. 登录界面的初始化

Login类的初始化方法中,设置了两个按钮的点击事件,分别用于显示创建账户窗口和检查登录信息。

class Login(QtWidgets.QWidget, Ui_Form):def __init__(self, parent=None):super(Login, self).__init__(parent)self.setupUi(self)self.main_window = MainWindow()self.pushButton_2.clicked.connect(self.show_create_count)self.pushButton.clicked.connect(self.login_check)
  • setupUi(self): 初始化UI界面。
  • pushButton_2 和 pushButton:分别连接到 show_create_count 和 login_check 方法。

3. 显示创建账户窗口

当用户点击“创建账户”按钮时,显示创建账户的窗口:

def show_create_count(self):self.createcount = CreatCount()self.createcount.show()

4. 查询用户信息

登录检查前,需要从数据库中查询用户信息:

def login_count_select(self):count = self.lineEdit.text()try:conn = sqlite3.connect(f'{data_path}')c = conn.cursor()query_sql = "SELECT email, password FROM count WHERE email=?"c.execute(query_sql, (count,))result = c.fetchone()return resultexcept Exception as e:print(f"Error selecting row from database: {e}")conn.rollback()finally:conn.close()
  • sqlite3.connect(f'{data_path}'): 连接到SQLite数据库。
  • SELECT email, password FROM count WHERE email=?: 查询用户的email和password。
def login_check(self):result = self.login_count_select()count = self.lineEdit.text()pwd = self.lineEdit_2.text()if result and result[0] == count and result[1] == pwd:self.main_window.show()self.main_window.set_label(count)self.close()else:QMessageBox.warning(self, '错误', '账号或密码错误!')
  • result[0] == count 和 result[1] == pwd: 验证用户输入的邮箱和密码。
  • self.main_window.show(): 如果验证通过,显示主窗口。
  • self.main_window.set_label(count): 设置主窗口的标签为用户邮箱。
  • QMessageBox.warning(self, '错误', '账号或密码错误!'): 如果验证失败,显示错误提示。

案例代码需要的可以私信我!记得留下你的CSDN号和vx号哦!

最后给大家留一个小问题:找回的功能该怎么写?(欢迎大家留言投稿!)

这篇关于PyQt5+SQLlite3基于邮箱验证的登陆注册找回系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1034186

相关文章

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环

linux系统上安装JDK8全过程

《linux系统上安装JDK8全过程》文章介绍安装JDK的必要性及Linux下JDK8的安装步骤,包括卸载旧版本、下载解压、配置环境变量等,强调开发需JDK,运行可选JRE,现JDK已集成JRE... 目录为什么要安装jdk?1.查看linux系统是否有自带的jdk:2.下载jdk压缩包2.解压3.配置环境

Linux查询服务器系统版本号的多种方法

《Linux查询服务器系统版本号的多种方法》在Linux系统管理和维护工作中,了解当前操作系统的版本信息是最基础也是最重要的操作之一,系统版本不仅关系到软件兼容性、安全更新策略,还直接影响到故障排查和... 目录一、引言:系统版本查询的重要性二、基础命令解析:cat /etc/Centos-release详

更改linux系统的默认Python版本方式

《更改linux系统的默认Python版本方式》通过删除原Python软链接并创建指向python3.6的新链接,可切换系统默认Python版本,需注意版本冲突、环境混乱及维护问题,建议使用pyenv... 目录更改系统的默认python版本软链接软链接的特点创建软链接的命令使用场景注意事项总结更改系统的默

在Linux系统上连接GitHub的方法步骤(适用2025年)

《在Linux系统上连接GitHub的方法步骤(适用2025年)》在2025年,使用Linux系统连接GitHub的推荐方式是通过SSH(SecureShell)协议进行身份验证,这种方式不仅安全,还... 目录步骤一:检查并安装 Git步骤二:生成 SSH 密钥步骤三:将 SSH 公钥添加到 github

PyQt5 GUI 开发的基础知识

《PyQt5GUI开发的基础知识》Qt是一个跨平台的C++图形用户界面开发框架,支持GUI和非GUI程序开发,本文介绍了使用PyQt5进行界面开发的基础知识,包括创建简单窗口、常用控件、窗口属性设... 目录简介第一个PyQt程序最常用的三个功能模块控件QPushButton(按钮)控件QLable(纯文本

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

Linux系统之lvcreate命令使用解读

《Linux系统之lvcreate命令使用解读》lvcreate是LVM中创建逻辑卷的核心命令,支持线性、条带化、RAID、镜像、快照、瘦池和缓存池等多种类型,实现灵活存储资源管理,需注意空间分配、R... 目录lvcreate命令详解一、命令概述二、语法格式三、核心功能四、选项详解五、使用示例1. 创建逻

SpringBoot整合Dubbo+ZK注册失败的坑及解决

《SpringBoot整合Dubbo+ZK注册失败的坑及解决》使用Dubbo框架时,需在公共pom添加依赖,启动类加@EnableDubbo,实现类用@DubboService替代@Service,配... 目录1.先看下公共的pom(maven创建的pom工程)2.启动类上加@EnableDubbo3.实