有客自远方来52 2024-04-16 18:41 采纳率: 15.3%
浏览 14
已结题

如何设置多账户登录?(语言-python|开发工具-pycharm)

我的期望是实现多账户的登录,符合数据库表的任何用户名Tuser和密码Tpassword都可以进行登录,该如何实现当输入用户名和密码时首先从指导老师表中遍历Tuser和Tpassword,然后进行判断登录

def login(self):
    """
           用户登录判断,根据用户名识别用户所属系统,并在对应的数据库中进行登录验证,
           成功则打开相应系统的主窗体。
           :return:
           """

    def check_network_connection():
        try:
            # 尝试连接到知名的公共DNS服务器
            socket.create_connection(('8.8.8.8', 53))
            return True  # 连接成功,表示网络状态正常
        except OSError as e:
            return False  # 连接失败,则表示当前状态无网络

    if not check_network_connection():  # 判断网络是否连接
        self.x = show_custom_message_box("注意!!!", "当前状态无网络,请检查网络连接")
        return
    userName = self.userName.text()
    password = self.password.text()
    if userName.strip() == '' or password.strip() == '':
        self.x = show_custom_message_box("系统提示", "用户名或密码不能为空!")
    else:
        pass

"""用户实体类"""


class Tea:
    # 编号
    TID = None
    # 姓名
    Tname = None
    # 年龄
    Tage = None
    # 性别
    Tsex = None
    # 联系电话
    Tphone = None
    # 住址
    Taddress = None
    # 用户名
    Tuser = None
    # 密码
    Tpassword = None

    def __init__(self, TID, Tname, Tage, Tsex, Tphone, Taddress, Tuser, Tpassword):
        self.TID = TID
        self.Tname = Tname
        self.Tage = Tage
        self.Tsex = Tsex
        self.Tphone = Tphone
        self.Taddress = Taddress
        self.Tuser = Tuser
        self.Tpassword = Tpassword

"""数据访问对象"""
from Util import dbUtil
from entity.TuserModel import Tea

# 记录当前用户
current: Tea = None


def login(tuser: Tea):
    con=None
    try:
        con=dbUtil.getCon()
        cursor=con.cursor()
        cursor.execute(f"SELECT * FROM Teacher WHERE Tuser='{tuser.Tuser}' AND Tpassword='{tuser.Tpassword}'")
        return cursor.fetchone()
    except Exception as e:
        print(e)
    finally:
        dbUtil.closeCon(con)

  • 写回答

4条回答 默认 最新

  • 檀越@新空间 2024-04-16 18:52
    关注

    晚上好🌙🌙🌙
    本答案参考ChatGPT-3.5

    针对你的问题,我认为可以分成以下几个步骤来实现多账户登录:

    1.在数据库中创建用户表,记录用户的用户名和密码等信息。

    2.在程序中编写用户实体类和数据访问对象,用于读取数据库中的用户信息。

    3.在登录界面编写相应的登录逻辑,将用户输入的用户名和密码传入数据访问对象中进行匹配,如果匹配成功则允许登录,否则提示登录失败的信息。

    下面我将详细介绍如何实现这些步骤。

    1.创建用户表

    首先你需要在数据库中创建一个用户表,包括用户名、密码、姓名、电话、地址等信息。例如在mysql数据库中,你可以创建一个如下的用户表:

    CREATE TABLE `UserInfo`(
        `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
        `username` VARCHAR(64) NOT NULL UNIQUE COMMENT '用户名',
        `password` VARCHAR(256) NOT NULL COMMENT '密码',
        `fullname` VARCHAR(32) COMMENT '姓名',
        `tel` VARCHAR(11) COMMENT '电话',
        `address` VARCHAR(256) COMMENT '地址'
    )ENGINE=InnoDB DEFAULT CHARSET=utf8;
    

    在这个表中,我们将用户名(username)设为了唯一的,并且用UNIQUE进行了限制,这样就能够确保每个用户都拥有唯一的用户名。

    2.编写用户实体类和数据访问对象

    接下来,你需要编写用户实体类和数据访问对象,用于读取数据库中的用户信息。

    这里以python语言为例,先定义Tea类作为用户实体类,包含了用户表中的各个字段:

    class Tea:
        def __init__(self, user_name, password, name, age, sex, phone, address):
            self.user_name = user_name
            self.password = password
            self.name = name
            self.age = age
            self.sex = sex
            self.phone = phone
            self.address = address
    
    

    然后定义UserDao类, 用来对用户表进行操作:

    import mysql.connector
    
    class UserDao:
        def __init__(self, db):
            self._conn = mysql.connector.connect(
                host=db.get('host'),
                user=db.get('user'),
                password=db.get('password'),
                database=db.get('database'))
            self._cursor = self._conn.cursor()
    
        def __del__(self):
            if self._conn:
                self._conn.close()
    
        def get_user(self, user_name):
            self._cursor.execute(f"SELECT * FROM UserInfo WHERE username='{user_name}'")
            result = self._cursor.fetchone()
            if result:
                return Tea(result[1], result[2], result[3], result[4], result[5], result[6], result[7])
    
            return None
    
        def add_user(self, user_name, password, name, age, sex, phone, address):
            sql = f"INSERT INTO UserInfo (username, password, fullname, tel, address) VALUES ('{user_name}', '{password}', '{name}', '{phone}', '{address}')"
            self._cursor.execute(sql)
            self._conn.commit()
    

    在这里,我们用到了Python的mysql.connector库来连接数据库,并实现了两个方法get_user()add_user(),分别用于获取和添加用户。

    3.编写登录界面逻辑

    最后是登录界面的逻辑,首先要获取用户输入的用户名和密码,然后查找相应的用户是否存在。如果用户存在且密码匹配成功,则允许登录,否则提示登录失败的信息。

    下面是一个示例代码:

    from dao.UserDao import UserDao
    from entity.TuserModel import Tea
    
    
    class LoginWindow(QWidget):
    
        def __init__(self):
            super(LoginWindow, self).__init__()
    
            self.setWindowTitle('登录')
            self.setFixedSize(300, 200)
    
            # 输入框
            self.user_edit = QLineEdit()
            self.pass_edit = QLineEdit()
            self.pass_edit.setEchoMode(QLineEdit.Password)
    
            # 按钮
            login_btn = QPushButton('登录')
            login_btn.clicked.connect(self.login)
    
            # 布局
            form_layout = QFormLayout()
            form_layout.addRow('用户名:', self.user_edit)
            form_layout.addRow('密码:', self.pass_edit)
    
            button_layout = QHBoxLayout()
            button_layout.addStretch(1)
            button_layout.addWidget(login_btn)
    
            main_layout = QVBoxLayout()
            main_layout.addLayout(form_layout)
            main_layout.addLayout(button_layout)
    
            self.setLayout(main_layout)
    
            # 初始化
            self.user_dao = UserDao({'host': 'localhost', 'user': 'root', 'password': 'root', 'database': 'test'})
    
        def login(self):
            user_name = self.user_edit.text()
            password = self.pass_edit.text()
    
            if not user_name or not password:
                QMessageBox.warning(self, '提示', '用户名和密码不能为空')
                return
    
            user = self.user_dao.get_user(user_name)
            if not user:
                QMessageBox.warning(self, '提示', '用户不存在')
                return
    
            if user.password == password:
                QMessageBox.information(self, '提示', '登录成功')
                self.accept()
            else:
                QMessageBox.warning(self, '提示', '密码错误')
    

    在这里,我们使用了PyQt库实现了登录界面的UI,并在点击登录按钮时调用login()方法进行登录验证。其中get_user()方法用于获取用户信息,password字段存储了用户的密码,所以我们只需用密码进行匹配即可实现登录验证。

    以上是实现多账户登录的一种方法,如果你有其他需求或问题,可以在下方继续补充。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月18日
  • 创建了问题 4月16日