自己写的 pyqt5+pymsql 一个带60秒重新发送随机验证码给手机注册账号界面全代码

实现效果如图:
在这里插入图片描述

1.界面文件register_ui.py

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'register_ui.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(469, 458)
        palette = QtGui.QPalette()
        brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush)
        brush = QtGui.QBrush(QtGui.QColor(78, 202, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush)
        brush = QtGui.QBrush(QtGui.QColor(78, 202, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush)
        brush = QtGui.QBrush(QtGui.QColor(78, 202, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush)
        brush = QtGui.QBrush(QtGui.QColor(78, 202, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush)
        MainWindow.setPalette(palette)
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("填写注册信息.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        MainWindow.setWindowIcon(icon)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout.setObjectName("gridLayout")
        spacerItem = QtWidgets.QSpacerItem(20, 11, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.gridLayout.addItem(spacerItem, 0, 4, 1, 1)
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setObjectName("label")
        self.gridLayout.addWidget(self.label, 1, 1, 1, 1)
        spacerItem1 = QtWidgets.QSpacerItem(24, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.gridLayout.addItem(spacerItem1, 1, 2, 1, 2)
        self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit.setObjectName("lineEdit")
        self.gridLayout.addWidget(self.lineEdit, 1, 4, 1, 2)
        spacerItem2 = QtWidgets.QSpacerItem(20, 10, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.gridLayout.addItem(spacerItem2, 2, 5, 1, 1)
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setObjectName("label_2")
        self.gridLayout.addWidget(self.label_2, 3, 1, 1, 1)
        spacerItem3 = QtWidgets.QSpacerItem(24, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.gridLayout.addItem(spacerItem3, 3, 2, 1, 2)
        self.lineEdit_2 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.gridLayout.addWidget(self.lineEdit_2, 3, 4, 1, 2)
        spacerItem4 = QtWidgets.QSpacerItem(20, 11, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.gridLayout.addItem(spacerItem4, 4, 5, 1, 1)
        spacerItem5 = QtWidgets.QSpacerItem(26, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.gridLayout.addItem(spacerItem5, 5, 0, 1, 1)
        self.label_3 = QtWidgets.QLabel(self.centralwidget)
        self.label_3.setObjectName("label_3")
        self.gridLayout.addWidget(self.label_3, 5, 1, 1, 2)
        spacerItem6 = QtWidgets.QSpacerItem(24, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.gridLayout.addItem(spacerItem6, 5, 3, 1, 1)
        self.splitter = QtWidgets.QSplitter(self.centralwidget)
        self.splitter.setOrientation(QtCore.Qt.Horizontal)
        self.splitter.setObjectName("splitter")
        self.lineEdit_3 = QtWidgets.QLineEdit(self.splitter)
        palette = QtGui.QPalette()
        brush = QtGui.QBrush(QtGui.QColor(255, 0, 0, 128))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.PlaceholderText, brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 0, 0, 128))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.PlaceholderText, brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 0, 0, 128))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.PlaceholderText, brush)
        self.lineEdit_3.setPalette(palette)
        self.lineEdit_3.setObjectName("lineEdit_3")
        self.send_certify_code_label = QtWidgets.QLabel(self.splitter)
        self.send_certify_code_label.setMouseTracking(True)
        self.send_certify_code_label.setFocusPolicy(QtCore.Qt.ClickFocus)
        self.send_certify_code_label.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
        self.send_certify_code_label.setAcceptDrops(True)
        self.send_certify_code_label.setObjectName("send_certify_code_label")
        self.gridLayout.addWidget(self.splitter, 5, 4, 1, 3)
        spacerItem7 = QtWidgets.QSpacerItem(64, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.gridLayout.addItem(spacerItem7, 5, 7, 1, 1)
        spacerItem8 = QtWidgets.QSpacerItem(20, 11, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.gridLayout.addItem(spacerItem8, 6, 6, 1, 1)
        self.label_6 = QtWidgets.QLabel(self.centralwidget)
        self.label_6.setObjectName("label_6")
        self.gridLayout.addWidget(self.label_6, 7, 1, 1, 2)
        spacerItem9 = QtWidgets.QSpacerItem(63, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.gridLayout.addItem(spacerItem9, 7, 3, 1, 1)
        self.lineEdit_4 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_4.setObjectName("lineEdit_4")
        self.gridLayout.addWidget(self.lineEdit_4, 7, 4, 1, 2)
        spacerItem10 = QtWidgets.QSpacerItem(20, 25, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.gridLayout.addItem(spacerItem10, 8, 5, 1, 1)
        self.label_4 = QtWidgets.QLabel(self.centralwidget)
        self.label_4.setObjectName("label_4")
        self.gridLayout.addWidget(self.label_4, 9, 1, 1, 1)
        spacerItem11 = QtWidgets.QSpacerItem(54, 13, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.gridLayout.addItem(spacerItem11, 9, 2, 1, 2)
        self.lineEdit_5 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_5.setObjectName("lineEdit_5")
        self.gridLayout.addWidget(self.lineEdit_5, 9, 4, 1, 2)
        spacerItem12 = QtWidgets.QSpacerItem(20, 10, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.gridLayout.addItem(spacerItem12, 10, 6, 1, 1)
        self.label_5 = QtWidgets.QLabel(self.centralwidget)
        self.label_5.setObjectName("label_5")
        self.gridLayout.addWidget(self.label_5, 11, 1, 1, 1)
        spacerItem13 = QtWidgets.QSpacerItem(24, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.gridLayout.addItem(spacerItem13, 11, 2, 1, 2)
        self.lineEdit_6 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_6.setObjectName("lineEdit_6")
        self.gridLayout.addWidget(self.lineEdit_6, 11, 4, 1, 2)
        spacerItem14 = QtWidgets.QSpacerItem(20, 11, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.gridLayout.addItem(spacerItem14, 12, 5, 1, 1)
        spacerItem15 = QtWidgets.QSpacerItem(178, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.gridLayout.addItem(spacerItem15, 13, 0, 1, 4)
        self.regist_button = QtWidgets.QPushButton(self.centralwidget)
        self.regist_button.setObjectName("regist_button")
        self.gridLayout.addWidget(self.regist_button, 13, 4, 1, 1)
        spacerItem16 = QtWidgets.QSpacerItem(180, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.gridLayout.addItem(spacerItem16, 13, 5, 1, 3)
        MainWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "填写注册信息"))
        self.label.setText(_translate("MainWindow", "姓名"))
        self.label_2.setText(_translate("MainWindow", "学号"))
        self.label_3.setText(_translate("MainWindow", "手机号"))
        self.send_certify_code_label.setText(_translate("MainWindow", "发送验证码"))
        self.label_6.setText(_translate("MainWindow", "验证码"))
        self.label_4.setText(_translate("MainWindow", "账号"))
        self.label_5.setText(_translate("MainWindow", "密码"))
        self.regist_button.setText(_translate("MainWindow", "注册"))


2.逻辑文件register_window.py

from register_ui import Ui_MainWindow
from PyQt5 import  QtWidgets
from PyQt5.QtWidgets import QApplication,QMessageBox
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtGui import QPalette, QBrush, QPixmap, QMovie
import global_num
import pymysql
import datetime
import random
from PyQt5.QtCore import QTimer
from sql_table_exist import sql_table_exist
import time
from send_sms import send_sms
class my_register(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)   #调用父类构造函数,创建窗体
        self.ui= Ui_MainWindow()        #创建UI对象
        self.ui.setupUi(self)      #构造UI界面
        self.resize(500, 500)

        #palette = QPalette()
        #palette.setBrush(QPalette.Background, QBrush(QPixmap("yzj.png")))
        #self.setPalette(palette)
        self.ui.send_certify_code_label.setText("<a href='www.baidu.com' style='color:red'>发送验证码</a>")
        self.ui.send_certify_code_label.linkActivated.connect(self.send_certify_code)

        self.ui.regist_button.clicked.connect(self.regist)
        self.count = 60
        self.time = QTimer(self)
        self.time.setInterval(1000)
        self.time.timeout.connect(self.refresh)
    '''
    ********************************************************
    *   实现验证码没收到时,过60秒才能重新发送验证码,为老板节约短信费。*
    ********************************************************
    '''
    def Action(self):
        if self.ui.send_certify_code_label.isEnabled():
            self.time.start()
            self.ui.send_certify_code_label.setEnabled(False)
    def send_certify_code(self):
        if self.ui.lineEdit_3.text() == '':
            self.ui.lineEdit_3.setPlaceholderText("请填入手机号")
        else:
            if sql_table_exist('stu_info') == 1:
                conn = pymysql.connect(host='localhost', port=3306, user='root', password=global_num.password,
                                       database='test')
                cursor = conn.cursor()
                cursor.execute('select * from stu_info')
                data = cursor.fetchall()
                global_num.data=data
                print(data)
                list = []
                for i in range(len(data)):
                    list.append(data[i][3])
                if self.ui.lineEdit_3.text() in list:
                    QMessageBox.about(self, "提示", "该手机号已注册!")

                else:
                    self.ui.send_certify_code_label.linkActivated.connect(self.Action)
                    self.time.start()
                    phone_num = self.ui.lineEdit_3.text()
                    global_num.phone_num = phone_num
                    random_num1 = str(random.randint(0, 9))
                    random_num2 = str(random.randint(0, 9))
                    random_num3 = str(random.randint(0, 9))
                    random_num4 = str(random.randint(0, 9))
                    random_num = random_num1 + random_num2 + random_num3 + random_num4
                    global_num.random_num = random_num
                    print(global_num.random_num)
                    '''
                    下面的send_sms()函数请谨慎删除解释符号,否则会花费开发人员1毛钱/次
                    '''
                    # send_sms()
            else:
                conn = pymysql.connect(host='localhost', port=3306, user='root', password=global_num.password,
                                           database='test')
                cursor = conn.cursor()
                sql = "CREATE TABLE IF NOT EXISTS stu_info (ID INT AUTO_INCREMENT PRIMARY KEY,姓名 longtext,学号 longtext,\
                    手机号 longtext,账号 longtext,密码 longtext,验证码 longtext\
                    ,注册时间 longtext,登录时间 longtext)ENGINE=INNODB DEFAULT CHARSET=utf8;"
                cursor.execute(sql)
                conn.commit()  # 没这句会丢失最后的插入数据!!
                conn.close()

    def refresh(self):
        self.time.start()
        if self.count > 0:
            self.ui.send_certify_code_label.setText(str(self.count) + '秒后重新发送验证码')
            self.count -= 1
        else:
            self.time.stop()
            self.ui.send_certify_code_label.setText("<a href='www.baidu.com' style='color:red'>发送验证码</a>")
            self.count = 60
            self.ui.send_certify_code_label.setEnabled(True)

    def regist(self):
        if self.ui.lineEdit.text() == '' or \
                self.ui.lineEdit_2.text() == '' or \
                self.ui.lineEdit_3.text() == '' or \
                self.ui.lineEdit_5.text() == '' or \
                self.ui.lineEdit_6.text() == '':
            QMessageBox.about(self, "提示", "请完整填写注册信息!")
        elif self.ui.lineEdit_4.text() == '':
            self.ui.lineEdit_4.clear()
            self.ui.lineEdit_4.setPlaceholderText("请输入验证码!")
            palette = QPalette()
            palette = QtGui.QPalette()
            brush = QtGui.QBrush(QtGui.QColor(255, 0, 0, 128))
            brush.setStyle(QtCore.Qt.SolidPattern)
            palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.PlaceholderText, brush)
            brush = QtGui.QBrush(QtGui.QColor(255, 0, 0, 128))
            brush.setStyle(QtCore.Qt.SolidPattern)
            palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.PlaceholderText, brush)
            brush = QtGui.QBrush(QtGui.QColor(255, 0, 0, 128))
            brush.setStyle(QtCore.Qt.SolidPattern)
            palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.PlaceholderText, brush)
            self.ui.lineEdit_4.setPalette(palette)
        elif self.ui.lineEdit_4.text() != global_num.random_num:
            self.ui.lineEdit_4.clear()
            self.ui.lineEdit_4.setPlaceholderText("验证码错误!")
            palette = QPalette()
            palette = QtGui.QPalette()
            brush = QtGui.QBrush(QtGui.QColor(255, 0, 0, 128))
            brush.setStyle(QtCore.Qt.SolidPattern)
            palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.PlaceholderText, brush)
            brush = QtGui.QBrush(QtGui.QColor(255, 0, 0, 128))
            brush.setStyle(QtCore.Qt.SolidPattern)
            palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.PlaceholderText, brush)
            brush = QtGui.QBrush(QtGui.QColor(255, 0, 0, 128))
            brush.setStyle(QtCore.Qt.SolidPattern)
            palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.PlaceholderText, brush)
            self.ui.lineEdit_4.setPalette(palette)
        else:
            conn = pymysql.connect(host='localhost', port=3306, user='root', password=global_num.password,
                                   database='test')
            cursor = conn.cursor()

            #sql = "update {table_name} set 姓名=%s,学号=%s ,账号=%s,密码=%s where 手机号=%s".format(table_name='stu_info')
            name=self.ui.lineEdit.text()
            stu_num=self.ui.lineEdit_2.text()
            list = []
            for i in range(len(global_num.data)):
                list.append(global_num.data[i][4])
            if self.ui.lineEdit_5.text() in list:
                QMessageBox.about(self, "提示", "该账号名已注册,请尝试其他账号名!")
            else:
                accout_name = self.ui.lineEdit_5.text()
                pass_name=self.ui.lineEdit_6.text()
                system_time = str(datetime.datetime.now())
                print(system_time)
                print(system_time[0:4])
                print(system_time[5:7])
                sql = " insert into stu_info(ID,姓名,学号,手机号,账号,密码,验证码,注册时间,登录时间) values (%s,%s,%s,%s,%s,%s,%s,%s,%s) "
                cursor.execute(sql, ([None, name, stu_num, global_num.phone_num, accout_name, pass_name, global_num.random_num, system_time, system_time]))  # 执行sql语句
                conn.commit()  # 没这句会丢失最后的插入数据!!
                conn.close()
                QMessageBox.about(self, "提示", "注册成功,请登录后使用!")


if __name__ == '__main__':

    app = QApplication(sys.argv)     #创建GUI应用程序
    mywindow= my_register()             #创建主窗体
    mywindow.show()                  #显示主窗体
    sys.exit(app.exec_())

3.全局参数文件(因为全局参数比较多,直接全复制过来了,这里只需要里面的参数一部分)

# -*- coding: gbk -*-
global account_name

account_name='wo'

global tool_info

global scan_result

global tool_num

global tool_name

scan_result=''

tool_info=[[],[]]

tool_num=[]

toolname=[]

global certify_code
certify_code=''
global password
password='zy8629213'
global random_num
random_num=''
global phone_num
phone_num=''
global data
data=()

4.发送验证短信的代码块

# python3
# 接口类型:互亿无线触发短信接口,支持发送验证码短信、订单通知短信等。
# 账户注册:请通过该地址开通账户http://user.ihuyi.com/?9vXc7
# 注意事项:
# (1)调试期间,请用默认的模板进行测试,默认模板详见接口文档;
# (2)请使用 用户名 及 APIkey来调用接口,APIkey在会员中心可以获取;
# (3)该代码仅供接入互亿无线短信接口参考使用,客户可根据实际需要自行编写;
import urllib.parse
import urllib.request
import global_num
def send_sms():
    # 接口地址
    url = 'http://106.ihuyi.com/webservice/sms.php?method=Submit'
    # 定义请求的数据
    values = {
        'account': '在该网站注册的账户',
        'password': '该网站给的密码',
        'mobile': global_num.phone_num,
        'content': '您的验证码是:'+global_num.random_num+'。请不要把验证码泄露给其他人。',
        'format': 'json',
    }

    # 将数据进行编码
    data = urllib.parse.urlencode(values).encode(encoding='UTF8')

    # 发起请求
    req = urllib.request.Request(url, data)
    response = urllib.request.urlopen(req)
    res = response.read()
    # 打印结果
    print(res.decode("utf8"))



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值