143 lines
5.1 KiB
Python
143 lines
5.1 KiB
Python
import sys
|
||
import subprocess
|
||
import re
|
||
import hashlib
|
||
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QHBoxLayout, QLabel, QLineEdit, QPushButton, QGroupBox, \
|
||
QSpacerItem, QSizePolicy, QMessageBox
|
||
import pymysql
|
||
host = "rm-bp1s36ps814qp23b7uo.mysql.rds.aliyuncs.com"
|
||
user = "zw1847930177"
|
||
password = "Zuowei1216"
|
||
database = "program"
|
||
charset = "utf8"
|
||
port = 3306
|
||
db = pymysql.connect(host=host, user=user, password=password, database=database, charset=charset, port=port)
|
||
cur = db.cursor()
|
||
user_creat ="""
|
||
CREATE TABLE IF NOT EXISTS User(
|
||
`id` INT auto_increment PRIMARY KEY,
|
||
`username` varchar(255) DEFAULT '',
|
||
`password` varchar(255) DEFAULT ''
|
||
) ENGINE=innodb DEFAULT CHARSET=utf8;
|
||
"""
|
||
cur.execute(user_creat)
|
||
cur = db.cursor()
|
||
User = 'User'
|
||
|
||
class LoginDialog(QWidget):
|
||
def __init__(self):
|
||
super().__init__()
|
||
self.setWindowTitle("PSMARK登录界面")
|
||
self.resize(300, 200)
|
||
|
||
主布局 = QVBoxLayout()
|
||
|
||
group1 = QGroupBox("登录验证")
|
||
group1_layout = QVBoxLayout()
|
||
|
||
group2 = QHBoxLayout()
|
||
label1 = QLabel("用户名")
|
||
self.edit1 = QLineEdit()
|
||
self.edit1.setFixedWidth(120)
|
||
spacer1 = QSpacerItem(40, 10, QSizePolicy.Expanding, QSizePolicy.Minimum)
|
||
group2.addWidget(label1)
|
||
group2.addItem(spacer1)
|
||
group2.addWidget(self.edit1)
|
||
|
||
group3 = QHBoxLayout()
|
||
label2 = QLabel("密码")
|
||
self.edit2 = QLineEdit()
|
||
self.edit2.setFixedWidth(120)
|
||
spacer2 = QSpacerItem(40, 10, QSizePolicy.Expanding, QSizePolicy.Minimum)
|
||
group3.addWidget(label2)
|
||
group3.addItem(spacer2)
|
||
group3.addWidget(self.edit2)
|
||
|
||
group4 = QHBoxLayout()
|
||
button1 = QPushButton("登录")
|
||
button2 = QPushButton("注册")
|
||
group4.addWidget(button1)
|
||
group4.addWidget(button2)
|
||
|
||
group1_layout.addLayout(group2)
|
||
group1_layout.addLayout(group3)
|
||
group1_layout.addLayout(group4)
|
||
group1.setLayout(group1_layout)
|
||
|
||
主布局.addWidget(group1)
|
||
|
||
group5 = QHBoxLayout()
|
||
label3 = QLabel("机器码")
|
||
edit3 = QLineEdit()
|
||
edit3.setFixedWidth(200)
|
||
|
||
# 获取主板序列号并提取数字部分
|
||
try:
|
||
result = subprocess.run(['wmic', 'baseboard', 'get', 'serialnumber'], stdout=subprocess.PIPE,
|
||
stderr=subprocess.PIPE, text=True)
|
||
motherboard_serial = result.stdout.strip()
|
||
|
||
# 使用正则表达式提取数字
|
||
motherboard_serial = re.sub(r'\D', '', motherboard_serial)
|
||
|
||
# 使用SHA-256加密特征码
|
||
feature_code = hashlib.sha256(motherboard_serial.encode()).hexdigest()
|
||
|
||
# 去掉特征码中的英文字符
|
||
feature_code = re.sub(r'[a-zA-Z]', '', feature_code)
|
||
except Exception as e:
|
||
feature_code = "Error: " + str(e)
|
||
|
||
edit3.setText(feature_code) # 将加密后的特征码设置为 "特征码" 输入框的文本
|
||
|
||
spacer3 = QSpacerItem(10, 10, QSizePolicy.Fixed, QSizePolicy.Minimum)
|
||
group5.addWidget(label3)
|
||
group5.addItem(spacer3)
|
||
group5.addWidget(edit3)
|
||
|
||
主布局.addLayout(group5)
|
||
|
||
self.setLayout(主布局)
|
||
|
||
# 链接登录的点击事件
|
||
button1.clicked.connect(self.slot_login)
|
||
# 连接注册按钮的点击事件
|
||
button2.clicked.connect(self.show_warning_message)
|
||
|
||
def slot_login(self):
|
||
user_name = self.edit1.text()
|
||
user_password = self.edit2.text()
|
||
# print(user_name,user_password)
|
||
# 执行SQL语句,从user数据表中查询code和time字段值
|
||
cur.execute(f"SELECT username,password FROM {User}")
|
||
# 将数据库查询的结果保存在result中
|
||
result = cur.fetchall()
|
||
name_list = [it[0] for it in result] # 从数据库查询的result中遍历查询元组中第一个元素name
|
||
# 判断用户名或密码不能为空
|
||
if not (user_name and user_password):
|
||
QMessageBox.critical(self, "错误", "用户名或密码不能为空!")
|
||
# 判断用户名和密码是否匹配
|
||
elif user_name in name_list:
|
||
if user_password == result[name_list.index(user_name)][1]:
|
||
QMessageBox.information(self, "欢迎您", "登录成功!\n在此添加新界面!")
|
||
else:
|
||
QMessageBox.critical(self, "错误", "密码输入错误!")
|
||
# 账号不在数据库中,则弹出是否注册的框
|
||
else:
|
||
QMessageBox.critical(self, "错误", "该账号不存在,请注册!")
|
||
|
||
def show_warning_message(self):
|
||
# 弹出警告消息框
|
||
warning_message = QMessageBox()
|
||
warning_message.setIcon(QMessageBox.Warning)
|
||
warning_message.setWindowTitle("警告")
|
||
warning_message.setText("请联系管理员 17520145271")
|
||
warning_message.exec_()
|
||
|
||
|
||
if __name__ == "__main__":
|
||
app = QApplication(sys.argv)
|
||
login_dialog = LoginDialog()
|
||
login_dialog.show()
|
||
sys.exit(app.exec_())
|