PyQt5图书管理系统练习(11)修改密码

这篇博客介绍了一个使用Python3和PyQt5库创建的修改密码对话框。程序涉及用户输入验证,如学号、原密码、新密码和确认密码的检查,以及MD5加密新密码并更新到数据库。代码包括UI布局、输入校验和信号槽机制,确保密码的安全性和用户交互体验。
摘要由CSDN通过智能技术生成

环境

系统:windows10系统

编辑器:PyCharm

编程语言:python3+pyqt5

设计逻辑

修改密码的页面可以参照注册和登陆界面

修改密码,主要需要用户输入学号, 原密码,新密码,确认密码实现

代码逻辑如下:

- 确认学号与原密码对应,否则报错

- 输入新密码与确认密码 ,如果相同,则md5加密后放入数据库中

- 注意设置输入校验

这里使用对话框实现

程序代码

""""
brief:修改密码
date:2020-10-06
author:chenyijun
version: python V3.8.1 pyqt5 V5.14.0
"""

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import qdarkstyle
from initDB import UserDbManager
import hashlib



class changePasswordDialog(QDialog):
    def __init__(self, parent=None):
        super(changePasswordDialog, self).__init__(parent)

        # 设置该窗口为一个当以层次的模态窗口,阻塞它的父窗口、祖父窗口和各个兄弟窗口接受输入信息,此时能够在弹出来的对话框中接收输入法信息。
        self.setWindowModality(Qt.WindowModal)
        self.setWindowTitle("修改密码")
        self.setUpUI()
        self.userdb = UserDbManager()

    def setUpUI(self):
        self.resize(300, 280)
        self.layout = QFormLayout()
        self.setLayout(self.layout)

        self.titlelabel = QLabel(" 修改密码")
        self.userIDLabel = QLabel("账    号:")
        self.oldPasswordLabel = QLabel("旧 密 码:")
        self.passwordLabel = QLabel("新 密 码:")
        self.confirmPasswordLabel = QLabel("确认密码:")

        self.userIDEdit = QLineEdit()
        # self.studentNameEdit=QLineEdit()
        self.oldPasswordEdit = QLineEdit()
        self.passwordEdit = QLineEdit()
        self.confirmPasswordEdit = QLineEdit()

        self.changePasswordButton = QPushButton("确认修改")
        self.changePasswordButton.setFixedWidth(140)
        self.changePasswordButton.setFixedHeight(32)

        self.layout.addRow("", self.titlelabel)
        self.layout.addRow(self.userIDLabel, self.userIDEdit)
        self.layout.addRow(self.oldPasswordLabel, self.oldPasswordEdit)
        self.layout.addRow(self.passwordLabel, self.passwordEdit)
        self.layout.addRow(self.confirmPasswordLabel, self.confirmPasswordEdit)
        self.layout.addRow("", self.changePasswordButton)

        font = QFont()
        font.setPixelSize(20)
        self.titlelabel.setFont(font)

        font.setPixelSize(16)
        self.userIDLabel.setFont(font)
        self.userIDEdit.setFont(font)
        self.oldPasswordLabel.setFont(font)
        self.oldPasswordEdit.setFont(font)
        self.passwordLabel.setFont(font)
        self.passwordEdit.setFont(font)
        self.confirmPasswordLabel.setFont(font)
        self.confirmPasswordEdit.setFont(font)
        self.changePasswordButton.setFont(font)

        self.titlelabel.setMargin(8)  # 控件与窗体的左右边距为8
        self.layout.setVerticalSpacing(10)  # 控件与控件的边距为8,Layout拥有得属性

        # 设置长度
        self.userIDEdit.setMaxLength(10)
        self.oldPasswordEdit.setMaxLength(16)
        self.passwordEdit.setMaxLength(16)
        self.confirmPasswordEdit.setMaxLength(16)

        self.oldPasswordEdit.setEchoMode(QLineEdit.PasswordEchoOnEdit)
        self.passwordEdit.setEchoMode(QLineEdit.PasswordEchoOnEdit)
        self.confirmPasswordEdit.setEchoMode(QLineEdit.PasswordEchoOnEdit)

        # 设置校验
        reg = QRegExp("PB[0~9]{8}")
        pValidator = QRegExpValidator(self)
        pValidator.setRegExp(reg)
        self.userIDEdit.setValidator(pValidator)

        reg = QRegExp("[a-zA-z0-9]+$")
        pValidator.setRegExp(reg)
        self.oldPasswordEdit.setValidator(pValidator)
        self.passwordEdit.setValidator(pValidator)
        self.confirmPasswordEdit.setValidator(pValidator)

        # 设置信号与槽
        self.changePasswordButton.clicked.connect(self.changePasswordButtonClicked)

    def changePasswordButtonClicked(self):
        userID = self.userIDEdit.text()
        oldPassword = self.oldPasswordEdit.text()
        password = self.passwordEdit.text()
        confirmPassword = self.confirmPasswordEdit.text()
        if (userID == "" or oldPassword == "" or password == "" or confirmPassword == ""):
            print(QMessageBox.warning(self, "警告", "输入不可为空,请重新输入", QMessageBox.Yes, QMessageBox.Yes))
            return

        # 密码与确认密码不同
        if (password != confirmPassword):
            print(QMessageBox.warning(self, "警告", "两次输入密码不同,请确认输入", QMessageBox.Yes, QMessageBox.Yes))
            self.passwordEdit.clear()
            self.confirmPasswordEdit.clear()
            return

        userinfo = self.userdb.querybyUserid(userID)

        # 如果用户不存在
        if (not userinfo):
            print(QMessageBox.warning(self, "警告", "该用户不存在,请重新输入", QMessageBox.Yes, QMessageBox.Yes))
            self.userIDEdit.clear()
            return
            # 如果密码错误
        hl = hashlib.md5()
        hl.update(oldPassword.encode(encoding='utf-8'))
        md5password = hl.hexdigest()
        if (md5password != userinfo[0][2]):
            print(QMessageBox.warning(self, "警告", "原密码输入错误,请重新输入", QMessageBox.Yes, QMessageBox.Yes))
            self.oldPasswordEdit.clear()
            return

        # 修改密码
        hl = hashlib.md5()
        hl.update(password.encode(encoding='utf-8'))
        newmd5password = hl.hexdigest()

        self.userdb.updatePassword(newmd5password, userID)
        QMessageBox.information(self, "提醒", "修改密码成功,请登录系统!", QMessageBox.Yes, QMessageBox.Yes)
        self.close()
        return


if __name__ == "__main__":
    app = QApplication(sys.argv)
    app.setWindowIcon(QIcon(":/images/MainWindow_1.png"))
    app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5())
    mainMindow = changePasswordDialog()
    mainMindow.show()
    sys.exit(app.exec_())

运行结果:

参考:

https://blog.csdn.net/weixin_38312031/article/details/80155716

https://blog.csdn.net/qiqiyingse/article/details/88242172

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值