首先创建自己的sql server数据库,并通过SQL Server 身份验证登录

创建自己的数据库,具体方法不详细介绍了。

列的数据类型尤为重要,这里我才用的是nvarchar(MAX),因为不同的数据类型会导致后续获取的长度是不同的,会影响判断。(之前采用的是nchar(10)数据类型,在python中查询到的数据为固定长度10,影响其判断是否正确)

再通过Qt Designer根据自己的想法设计登录界面和注册界面

 对象命名为:

 

 分别保存为login.ui对应的为登录界面    register.ui对应的为注册界面

在python程序中采用的为动态加载UI文件

登录段代码为:

class Win_Login(object):
    def __init__(self):
        #self.get_conn()
        # 从文件中加载UI定义
        # 从 UI 定义中动态 创建一个相应的窗口对象
        # 注意:里面的控件对象也成为窗口对象的属性了
        # 比如 self.ui.btn_login , self.ui.edt_password
        self.ui = QUiLoader().load('login.ui')
        self.ui.btn_login.clicked.connect(self.onSignIn)
        self.ui.edt_password.returnPressed.connect(self.onSignIn)
        self.ui.btn_register.clicked.connect(self.open_register_window)
     # 获取连接
    def mysql_conn(self):
        conn = pymssql.connect(host='**.**.**.**', user='sa', password='****',         
                               database='NamePwd',charset='utf8')
        # 以字典形式输出数据  不设置则默认为元组类型输出
        #cursor = conn.cursor(DictCursor)
        return conn
    #登录
    def onSignIn(self):
        username = self.ui.edt_username.text().strip()
        password = self.ui.edt_password.text().strip()
        conn = self.mysql_conn()
        #  得到一个游标对象
        cus1 = conn.cursor()
        # 根据用户名查询密码
        #login_sql = 'select password from admin where name= %s'
        cus1.execute(login_sql,(username,))
        result = cus1.fetchone()
        print(result)
        if result == None:
            QMessageBox.warning(self.ui, '登录失败', '用户名错误')
            print("用户名错误")
        elif str(result[0]) == password:
            SI.mainWin = Win_Main()
            SI.mainWin.ui.show()
            self.ui.edt_password.setText('')
            self.ui.hide()
            print("登陆成功")
        else:
            QMessageBox.warning(self.ui, '登录失败', '密码错误')
            print("密码错误")
        conn.commit()
        cus1.close()
        conn.close()
    #打开注册界面
    def open_register_window(self):
        SI.registerWin = Win_Register()
        SI.registerWin.ui.show()

注册段代码为:

class Win_Register :
    def __init__(self):
        self.ui = QUiLoader().load('register.ui')
        self.ui.btn_reg.clicked.connect(self.RegisterAccout)
    # 获取连接
    def mysql_conn(self):
        conn = pymssql.connect(host='**.**.**.**', user='sa', password='***', 
                                database='NamePwd',charset='utf8')
        # 以字典形式输出数据  不设置则默认为元组类型输出
        #cursor = conn.cursor(DictCursor)
        return conn
    #注册
    def RegisterAccout(self):
        conn = self.mysql_conn()
        reg_username = self.ui.reg_username.text().strip()
        reg_password = self.ui.reg_password.text().strip()
        reg_repassword = self.ui.reg_repassword.text().strip()
        if reg_password != reg_repassword:
            print("两次密码输入不一致,请重新输入!")
            return
        check_sql = 'select name from admin where BINARY name =%s '  # 加入BINARY关键字,可使查询结果区分大小写
        #  得到一个游标对象
        cus1 = conn.cursor()
        # 根据用户名查询密码
        login_sql = 'select password from admin where name= %s'
        cus1.execute(check_sql, reg_username)
        res = cus1.fetchone()
        print(res)
        #res = conn.cursor.execute(check_sql, (reg_username,))
        print(res)
        if res:
            print("用户名【%s】已存在,请重新输入!" % reg_username)
            return
        else:
            cus1.execute(register_sql, (reg_username, reg_password))
            #conn.cursor.execute(register_sql, (reg_username, reg_password))
            print("注册成功!")
            conn.commit()
            conn.close()
            return

注意:conn.commit()代表着提交事务,不可缺少!之前少了这一个数据库一直不发生变化

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐