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


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

    项目界面

    邮件样式

    项目流程

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

    目录结构

    [db文件夹] 存放数据库

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

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

    [img文件夹] 存放图片

    [ui文件夹] 存放ui文件

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

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

    注册-逻辑代码

    1. 验证码生成与发送

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

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

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

    1. 准备工作

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

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

    2. 基本步骤

    2.1 导入必要模块

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

    1. import smtplib
    2. from email.mime.text import MIMEText
    3. from email.mime.multipart import MIMEMultipart
    '
    运行
    2.2 创建邮件内容

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

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

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

    1. smtp_server = "smtp.gmail.com"
    2. smtp_port = 465 # 对于SSL
    3. try:
    4. # 连接到SMTP服务器
    5. server = smtplib.SMTP_SSL(smtp_server, smtp_port)
    6. server.login(sender_email, password) # 登录到SMTP服务器
    7. server.sendmail(sender_email, receiver_email, message.as_string()) # 发送邮件
    8. print("邮件发送成功")
    9. except Exception as e:
    10. print(f"邮件发送失败: {e}")
    11. finally:
    12. server.quit() # 关闭连接

    注意事项

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

    3. 验证码校验

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

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

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

    核心校验逻辑如下:

    1. def check_code(self):
    2. timenow = datetime.datetime.now().strftime("%Y-%m-%d %H:%M")
    3. code_input = self.lineEdit_4.text()
    4. result = self.select_code()
    5. if not code_input:
    6. QMessageBox.warning(self, '失败', '请输入验证码!!')
    7. return
    8. if result is None:
    9. QMessageBox.warning(self, '失败', '未找到验证码记录!')
    10. return
    11. code, expiry_time = result
    12. if code_input == code and expiry_time >= timenow:
    13. self.insert_count(email, password)
    14. else:
    15. QMessageBox.warning(self, '失败', '验证码错误或已过期!')
    '
    运行

    4. 数据库操作

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

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

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

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

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

    1. def insert_code(self):
    2. # 插入验证码到数据库
    3. def select_code(self):
    4. # 从数据库查询验证码
    5. def delete_code(self):
    6. # 删除数据库中的验证码

    登陆-逻辑代码

    1. 项目结构

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

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

    2. 登录界面的初始化

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

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

    3. 显示创建账户窗口

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

    1. def show_create_count(self):
    2. self.createcount = CreatCount()
    3. self.createcount.show()
    '
    运行

    4. 查询用户信息

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

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

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

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

  • 相关阅读:
    视听杂志视听杂志社视听编辑部2022年第11期目录
    上海亚商投顾:沪指放量涨1.69% 房地产板块掀涨停潮
    疫苗预约小程序,疫苗预约微信小程序,疫苗接种小程序毕业设计作品
    WebGIS的基本概念
    做大模型产品,如何设计prompt?
    小炒和黄啤
    【小程序】编译预览小程序时,出现-80063错误提示
    LeetCode118.杨辉三角 | LeetCode119.杨辉三角Ⅱ
    纵享丝滑!Cesium + ffmpegserver 生成高质量动态视频【逐帧生成】
    RocketMq源码分析(一)--基本知识
  • 原文地址:https://blog.csdn.net/weixin_60962920/article/details/139479735