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系统下如何查找JDK的安装路径

《Windows系统下如何查找JDK的安装路径》:本文主要介绍Windows系统下如何查找JDK的安装路径,文中介绍了三种方法,分别是通过命令行检查、使用verbose选项查找jre目录、以及查看... 目录一、确认是否安装了JDK二、查找路径三、另外一种方式如果很久之前安装了JDK,或者在别人的电脑上,想

Spring Cloud之注册中心Nacos的使用详解

《SpringCloud之注册中心Nacos的使用详解》本文介绍SpringCloudAlibaba中的Nacos组件,对比了Nacos与Eureka的区别,展示了如何在项目中引入SpringClo... 目录Naacos服务注册/服务发现引⼊Spring Cloud Alibaba依赖引入Naco编程s依

Git如何修改已提交人的用户名和邮箱

《Git如何修改已提交人的用户名和邮箱》文章介绍了如何修改Git已提交人的用户名和邮箱,包括注意事项和具体步骤,确保操作正确无误... 目录git修改已提交人的用户名和邮箱前言第一步第二步总结git修改已提交人的用户名和邮箱前言需注意以下两点内容:需要在顶层目录下(php就是 .git 文件夹所在的目

Linux系统之authconfig命令的使用解读

《Linux系统之authconfig命令的使用解读》authconfig是一个用于配置Linux系统身份验证和账户管理设置的命令行工具,主要用于RedHat系列的Linux发行版,它提供了一系列选项... 目录linux authconfig命令的使用基本语法常用选项示例总结Linux authconfi

使用Java发送邮件到QQ邮箱的完整指南

《使用Java发送邮件到QQ邮箱的完整指南》在现代软件开发中,邮件发送功能是一个常见的需求,无论是用户注册验证、密码重置,还是系统通知,邮件都是一种重要的通信方式,本文将详细介绍如何使用Java编写程... 目录引言1. 准备工作1.1 获取QQ邮箱的SMTP授权码1.2 添加JavaMail依赖2. 实现

Nginx配置系统服务&设置环境变量方式

《Nginx配置系统服务&设置环境变量方式》本文介绍了如何将Nginx配置为系统服务并设置环境变量,以便更方便地对Nginx进行操作,通过配置系统服务,可以使用系统命令来启动、停止或重新加载Nginx... 目录1.Nginx操作问题2.配置系统服android务3.设置环境变量总结1.Nginx操作问题

CSS3 最强二维布局系统之Grid 网格布局

《CSS3最强二维布局系统之Grid网格布局》CS3的Grid网格布局是目前最强的二维布局系统,可以同时对列和行进行处理,将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局,本文介... 深入学习 css3 目前最强大的布局系统 Grid 网格布局Grid 网格布局的基本认识Grid 网

Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)

《Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)》本文介绍了如何使用Python和Selenium结合ddddocr库实现图片验证码的识别和点击功能,感兴趣的朋友一起看... 目录1.获取图片2.目标识别3.背景坐标识别3.1 ddddocr3.2 打码平台4.坐标点击5.图

Go路由注册方法详解

《Go路由注册方法详解》Go语言中,http.NewServeMux()和http.HandleFunc()是两种不同的路由注册方式,前者创建独立的ServeMux实例,适合模块化和分层路由,灵活性高... 目录Go路由注册方法1. 路由注册的方式2. 路由器的独立性3. 灵活性4. 启动服务器的方式5.

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创