Files
DP/psmark/newmarkLogin.py

143 lines
5.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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_())