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

相关文章

Windows系统宽带限制如何解除?

《Windows系统宽带限制如何解除?》有不少用户反映电脑网速慢得情况,可能是宽带速度被限制的原因,只需解除限制即可,具体该如何操作呢?本文就跟大家一起来看看Windows系统解除网络限制的操作方法吧... 有不少用户反映电脑网速慢得情况,可能是宽带速度被限制的原因,只需解除限制即可,具体该如何操作呢?本文

CentOS和Ubuntu系统使用shell脚本创建用户和设置密码

《CentOS和Ubuntu系统使用shell脚本创建用户和设置密码》在Linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设置密码,本文写了一个shell... 在linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设

电脑找不到mfc90u.dll文件怎么办? 系统报错mfc90u.dll丢失修复的5种方案

《电脑找不到mfc90u.dll文件怎么办?系统报错mfc90u.dll丢失修复的5种方案》在我们日常使用电脑的过程中,可能会遇到一些软件或系统错误,其中之一就是mfc90u.dll丢失,那么,mf... 在大部分情况下出现我们运行或安装软件,游戏出现提示丢失某些DLL文件或OCX文件的原因可能是原始安装包

电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案

《电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案》最近有不少兄弟反映,电脑突然弹出“mfc100u.dll已加载,但找不到入口点”的错误提示,导致一些程序无法正... 在计算机使用过程中,我们经常会遇到一些错误提示,其中最常见的就是“找不到指定的模块”或“缺少某个DL

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

JSON Web Token在登陆中的使用过程

《JSONWebToken在登陆中的使用过程》:本文主要介绍JSONWebToken在登陆中的使用过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录JWT 介绍微服务架构中的 JWT 使用结合微服务网关的 JWT 验证1. 用户登录,生成 JWT2. 自定义过滤

opencv图像处理之指纹验证的实现

《opencv图像处理之指纹验证的实现》本文主要介绍了opencv图像处理之指纹验证的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、简介二、具体案例实现1. 图像显示函数2. 指纹验证函数3. 主函数4、运行结果三、总结一、