Python Forum

Full Version: PyQt Login and Sqlalchemy
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
I am trying to check if username and password is found in the database.I am getting data from login.py.I am not getting the logic right. Any help will be appreciated.I am creating a CRUD app.User can add a product into the database after login.
.
This is the tree for the dir
── caller.py
├── employee.db
├── modules
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── login.py
│   ├── login.pyc
│   ├── main.py
│   ├── main.pyc
│   ├── signup.py
│   ├── signup.pyc
│   ├── user.py
│   └── user.pyc
├── uis
│   ├── login.ui
│   ├── main.ui
│   └── signup.ui
└── user.db
login.py
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'login.ui'
#
# Created by: PyQt4 UI code generator 4.12.1
#
# WARNING! All changes made in this file will be lost!

from PyQt4 import QtCore, QtGui

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    def _fromUtf8(s):
        return s

try:
    _encoding = QtGui.QApplication.UnicodeUTF8
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig)

class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName(_fromUtf8("Dialog"))
        Dialog.resize(400, 180)
        self.gridLayout = QtGui.QGridLayout(Dialog)
        self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
        spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum)
        self.gridLayout.addItem(spacerItem, 4, 1, 1, 1)
        self.label_2 = QtGui.QLabel(Dialog)
        self.label_2.setObjectName(_fromUtf8("label_2"))
        self.gridLayout.addWidget(self.label_2, 1, 0, 1, 1)
        self.signupbutton = QtGui.QPushButton(Dialog)
        self.signupbutton.setObjectName(_fromUtf8("signupbutton"))
        self.gridLayout.addWidget(self.signupbutton, 4, 3, 1, 1)
        self.label = QtGui.QLabel(Dialog)
        self.label.setObjectName(_fromUtf8("label"))
        self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
        self.loginbutton = QtGui.QPushButton(Dialog)
        self.loginbutton.setObjectName(_fromUtf8("loginbutton"))
        self.gridLayout.addWidget(self.loginbutton, 4, 2, 1, 1)
        self.passs = QtGui.QLineEdit(Dialog)
        self.passs.setObjectName(_fromUtf8("passs"))
        self.gridLayout.addWidget(self.passs, 1, 1, 1, 3)
        self.user = QtGui.QLineEdit(Dialog)
        self.user.setObjectName(_fromUtf8("user"))
        self.gridLayout.addWidget(self.user, 0, 1, 1, 3)

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

    def retranslateUi(self, Dialog):
        Dialog.setWindowTitle(_translate("Dialog", "Dialog", None))
        self.label_2.setText(_translate("Dialog", "Password", None))
        self.signupbutton.setText(_translate("Dialog", "Signup", None))
        self.label.setText(_translate("Dialog", "Username", None))
        self.loginbutton.setText(_translate("Dialog", "Login", None))


if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    Dialog = QtGui.QDialog()
    ui = Ui_Dialog()
    ui.setupUi(Dialog)
    Dialog.show()
    sys.exit(app.exec_())
signup.py :
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'signup.ui'
#
# Created by: PyQt4 UI code generator 4.12.1
#
# WARNING! All changes made in this file will be lost!
import sys
from PyQt4 import QtCore, QtGui

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    def _fromUtf8(s):
        return s

try:
    _encoding = QtGui.QApplication.UnicodeUTF8
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig)

class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName(_fromUtf8("Dialog"))
        Dialog.resize(400, 252)
        self.gridLayout = QtGui.QGridLayout(Dialog)
        self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
        self.textEdit = QtGui.QTextEdit(Dialog)
        self.textEdit.setObjectName(_fromUtf8("textEdit"))
        self.gridLayout.addWidget(self.textEdit, 0, 0, 1, 2)
        self.label = QtGui.QLabel(Dialog)
        self.label.setObjectName(_fromUtf8("label"))
        self.gridLayout.addWidget(self.label, 1, 0, 1, 1)
        self.name = QtGui.QLineEdit(Dialog)
        self.name.setObjectName(_fromUtf8("name"))
        self.gridLayout.addWidget(self.name, 1, 1, 1, 1)
        self.label_3 = QtGui.QLabel(Dialog)
        self.label_3.setObjectName(_fromUtf8("label_3"))
        self.gridLayout.addWidget(self.label_3, 2, 0, 1, 1)
        self.contact = QtGui.QLineEdit(Dialog)
        self.contact.setObjectName(_fromUtf8("contact"))
        self.gridLayout.addWidget(self.contact, 2, 1, 1, 1)
        self.label_2 = QtGui.QLabel(Dialog)
        self.label_2.setObjectName(_fromUtf8("label_2"))
        self.gridLayout.addWidget(self.label_2, 3, 0, 1, 1)
        self.password = QtGui.QLineEdit(Dialog)
        self.password.setObjectName(_fromUtf8("password"))
        self.gridLayout.addWidget(self.password, 3, 1, 1, 1)
        self.label_4 = QtGui.QLabel(Dialog)
        self.label_4.setObjectName(_fromUtf8("label_4"))
        self.gridLayout.addWidget(self.label_4, 4, 0, 1, 1)
        self.email = QtGui.QLineEdit(Dialog)
        self.email.setObjectName(_fromUtf8("email"))
        self.gridLayout.addWidget(self.email, 4, 1, 1, 1)
        self.signupbutton = QtGui.QPushButton(Dialog)
        self.signupbutton.setObjectName(_fromUtf8("signupbutton"))
        self.gridLayout.addWidget(self.signupbutton, 5, 1, 1, 1)

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

    def retranslateUi(self, Dialog):
        Dialog.setWindowTitle(_translate("Dialog", "Dialog", None))
        self.textEdit.setHtml(_translate("Dialog", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:\'.SF NS Text\'; font-size:13pt; font-weight:400; font-style:normal;\">\n"
"<p align=\"center\" style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">SignUp Details</p></body></html>", None))
        self.label.setText(_translate("Dialog", "Name", None))
        self.label_3.setText(_translate("Dialog", "Contact", None))
        self.label_2.setText(_translate("Dialog", "Password", None))
        self.label_4.setText(_translate("Dialog", "Email", None))
        self.signupbutton.setText(_translate("Dialog", "Signup", None))


if __name__ == "__main__":
   
    app = QtGui.QApplication(sys.argv)
    Dialog = QtGui.QDialog()
    ui = Ui_Dialog()
    ui.setupUi(Dialog)
    Dialog.show()
    sys.exit(app.exec_())
main.py:
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'main.ui'
#
# Created by: PyQt4 UI code generator 4.12.1
#
# WARNING! All changes made in this file will be lost!

from PyQt4 import QtCore, QtGui

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    def _fromUtf8(s):
        return s

try:
    _encoding = QtGui.QApplication.UnicodeUTF8
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig)

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName(_fromUtf8("MainWindow"))
        MainWindow.resize(1280, 671)
        self.centralwidget = QtGui.QWidget(MainWindow)
        self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
        self.gridLayout = QtGui.QGridLayout(self.centralwidget)
        self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
        self.tabWidget = QtGui.QTabWidget(self.centralwidget)
        font = QtGui.QFont()
        font.setStrikeOut(False)
        self.tabWidget.setFont(font)
        self.tabWidget.setUsesScrollButtons(True)
        self.tabWidget.setObjectName(_fromUtf8("tabWidget"))
        self.tab_3 = QtGui.QWidget()
        self.tab_3.setObjectName(_fromUtf8("tab_3"))
        self.addproduct_groupBox = QtGui.QGroupBox(self.tab_3)
        self.addproduct_groupBox.setGeometry(QtCore.QRect(9, -1, 741, 231))
        self.addproduct_groupBox.setObjectName(_fromUtf8("addproduct_groupBox"))
        self.addproduct_button = QtGui.QPushButton(self.addproduct_groupBox)
        self.addproduct_button.setGeometry(QtCore.QRect(210, 200, 113, 32))
        self.addproduct_button.setObjectName(_fromUtf8("addproduct_button"))
        self.layoutWidget = QtGui.QWidget(self.addproduct_groupBox)
        self.layoutWidget.setGeometry(QtCore.QRect(20, 40, 611, 147))
        self.layoutWidget.setObjectName(_fromUtf8("layoutWidget"))
        self.gridLayout_6 = QtGui.QGridLayout(self.layoutWidget)
        self.gridLayout_6.setMargin(0)
        self.gridLayout_6.setObjectName(_fromUtf8("gridLayout_6"))
        self.product_name_5 = QtGui.QLabel(self.layoutWidget)
        self.product_name_5.setObjectName(_fromUtf8("product_name_5"))
        self.gridLayout_6.addWidget(self.product_name_5, 0, 0, 1, 1)
        self.pname_lineEdit_5 = QtGui.QLineEdit(self.layoutWidget)
        self.pname_lineEdit_5.setObjectName(_fromUtf8("pname_lineEdit_5"))
        self.gridLayout_6.addWidget(self.pname_lineEdit_5, 0, 1, 1, 1)
        self.starting_inventory_5 = QtGui.QLabel(self.layoutWidget)
        self.starting_inventory_5.setObjectName(_fromUtf8("starting_inventory_5"))
        self.gridLayout_6.addWidget(self.starting_inventory_5, 1, 0, 1, 1)
        self.sinventory_lineEdit_5 = QtGui.QLineEdit(self.layoutWidget)
        self.sinventory_lineEdit_5.setObjectName(_fromUtf8("sinventory_lineEdit_5"))
        self.gridLayout_6.addWidget(self.sinventory_lineEdit_5, 1, 1, 1, 1)
        self.inventory_required_5 = QtGui.QLabel(self.layoutWidget)
        self.inventory_required_5.setObjectName(_fromUtf8("inventory_required_5"))
        self.gridLayout_6.addWidget(self.inventory_required_5, 2, 0, 1, 1)
        self.ireceived_lineEdit_5 = QtGui.QLineEdit(self.layoutWidget)
        self.ireceived_lineEdit_5.setObjectName(_fromUtf8("ireceived_lineEdit_5"))
        self.gridLayout_6.addWidget(self.ireceived_lineEdit_5, 2, 1, 1, 1)
        self.inventory_on_hand_5 = QtGui.QLabel(self.layoutWidget)
        self.inventory_on_hand_5.setObjectName(_fromUtf8("inventory_on_hand_5"))
        self.gridLayout_6.addWidget(self.inventory_on_hand_5, 3, 0, 1, 1)
        self.ihand_lineEdit_5 = QtGui.QLineEdit(self.layoutWidget)
        self.ihand_lineEdit_5.setObjectName(_fromUtf8("ihand_lineEdit_5"))
        self.gridLayout_6.addWidget(self.ihand_lineEdit_5, 3, 1, 1, 1)
        self.minimum_required_5 = QtGui.QLabel(self.layoutWidget)
        self.minimum_required_5.setObjectName(_fromUtf8("minimum_required_5"))
        self.gridLayout_6.addWidget(self.minimum_required_5, 4, 0, 1, 1)
        self.mrequired_lineEdit_5 = QtGui.QLineEdit(self.layoutWidget)
        self.mrequired_lineEdit_5.setObjectName(_fromUtf8("mrequired_lineEdit_5"))
        self.gridLayout_6.addWidget(self.mrequired_lineEdit_5, 4, 1, 1, 1)
        self.label_5 = QtGui.QLabel(self.tab_3)
        self.label_5.setGeometry(QtCore.QRect(100, 240, 91, 16))
        self.label_5.setObjectName(_fromUtf8("label_5"))
        self.products_table = QtGui.QTableWidget(self.tab_3)
        self.products_table.setGeometry(QtCore.QRect(50, 270, 641, 192))
        self.products_table.viewport().setProperty("cursor", QtGui.QCursor(QtCore.Qt.ArrowCursor))
        self.products_table.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
        self.products_table.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
        self.products_table.setAlternatingRowColors(True)
        self.products_table.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
        self.products_table.setRowCount(3)
        self.products_table.setColumnCount(6)
        self.products_table.setObjectName(_fromUtf8("products_table"))
        self.deleteproduct_button = QtGui.QPushButton(self.tab_3)
        self.deleteproduct_button.setGeometry(QtCore.QRect(210, 490, 113, 32))
        self.deleteproduct_button.setObjectName(_fromUtf8("deleteproduct_button"))
        self.updateproduct_button = QtGui.QPushButton(self.tab_3)
        self.updateproduct_button.setGeometry(QtCore.QRect(372, 490, 131, 32))
        self.updateproduct_button.setObjectName(_fromUtf8("updateproduct_button"))
        self.tabWidget.addTab(self.tab_3, _fromUtf8(""))
        self.tab_4 = QtGui.QWidget()
        self.tab_4.setObjectName(_fromUtf8("tab_4"))
        self.gridLayout_2 = QtGui.QGridLayout(self.tab_4)
        self.gridLayout_2.setMargin(0)
        self.gridLayout_2.setObjectName(_fromUtf8("gridLayout_2"))
        self.label_8 = QtGui.QLabel(self.tab_4)
        self.label_8.setObjectName(_fromUtf8("label_8"))
        self.gridLayout_2.addWidget(self.label_8, 3, 0, 1, 1)
        self.email_lineEdit = QtGui.QLineEdit(self.tab_4)
        self.email_lineEdit.setMaximumSize(QtCore.QSize(200, 16777215))
        self.email_lineEdit.setObjectName(_fromUtf8("email_lineEdit"))
        self.gridLayout_2.addWidget(self.email_lineEdit, 3, 1, 1, 1)
        self.mypassword_lineEdit = QtGui.QLineEdit(self.tab_4)
        self.mypassword_lineEdit.setMaximumSize(QtCore.QSize(200, 16777215))
        self.mypassword_lineEdit.setObjectName(_fromUtf8("mypassword_lineEdit"))
        self.gridLayout_2.addWidget(self.mypassword_lineEdit, 1, 1, 1, 1)
        self.label_7 = QtGui.QLabel(self.tab_4)
        self.label_7.setObjectName(_fromUtf8("label_7"))
        self.gridLayout_2.addWidget(self.label_7, 2, 0, 1, 1)
        self.contact_lineEdit = QtGui.QLineEdit(self.tab_4)
        self.contact_lineEdit.setMaximumSize(QtCore.QSize(200, 16777215))
        self.contact_lineEdit.setObjectName(_fromUtf8("contact_lineEdit"))
        self.gridLayout_2.addWidget(self.contact_lineEdit, 2, 1, 1, 1)
        self.myname_lineEdit = QtGui.QLineEdit(self.tab_4)
        self.myname_lineEdit.setMaximumSize(QtCore.QSize(200, 16777215))
        self.myname_lineEdit.setObjectName(_fromUtf8("myname_lineEdit"))
        self.gridLayout_2.addWidget(self.myname_lineEdit, 0, 1, 1, 1)
        self.label_6 = QtGui.QLabel(self.tab_4)
        self.label_6.setObjectName(_fromUtf8("label_6"))
        self.gridLayout_2.addWidget(self.label_6, 1, 0, 1, 1)
        spacerItem = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
        self.gridLayout_2.addItem(spacerItem, 4, 1, 1, 1)
        self.label = QtGui.QLabel(self.tab_4)
        self.label.setObjectName(_fromUtf8("label"))
        self.gridLayout_2.addWidget(self.label, 0, 0, 1, 1)
        spacerItem1 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
        self.gridLayout_2.addItem(spacerItem1, 1, 2, 1, 1)
        self.tabWidget.addTab(self.tab_4, _fromUtf8(""))
        self.gridLayout.addWidget(self.tabWidget, 0, 0, 1, 1)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtGui.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1280, 22))
        self.menubar.setObjectName(_fromUtf8("menubar"))
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtGui.QStatusBar(MainWindow)
        self.statusbar.setObjectName(_fromUtf8("statusbar"))
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        self.tabWidget.setCurrentIndex(0)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None))
        self.addproduct_groupBox.setTitle(_translate("MainWindow", "Add Product", None))
        self.addproduct_button.setText(_translate("MainWindow", "Add Product", None))
        self.product_name_5.setText(_translate("MainWindow", "Product Name", None))
        self.starting_inventory_5.setText(_translate("MainWindow", "Starting Inventory", None))
        self.inventory_required_5.setText(_translate("MainWindow", "Inventory Received", None))
        self.inventory_on_hand_5.setText(_translate("MainWindow", "Inventory on hand", None))
        self.minimum_required_5.setText(_translate("MainWindow", "Minimum Required", None))
        self.label_5.setText(_translate("MainWindow", "All Products", None))
        self.deleteproduct_button.setText(_translate("MainWindow", "Delete Product", None))
        self.updateproduct_button.setText(_translate("MainWindow", "Update Product", None))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3), _translate("MainWindow", "Welcome", None))
        self.label_8.setText(_translate("MainWindow", "Email", None))
        self.label_7.setText(_translate("MainWindow", "Contact", None))
        self.label_6.setText(_translate("MainWindow", "My Password", None))
        self.label.setText(_translate("MainWindow", "My Name", None))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_4), _translate("MainWindow", "My Profile", None))


if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    MainWindow = QtGui.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())
user.py:
import sqlalchemy
from sqlalchemy import exists  
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()

class User(Base):
    __tablename__   = 'users'   
    user_id     = sqlalchemy.Column(sqlalchemy.Integer, primary_key=True)
    name            = sqlalchemy.Column(sqlalchemy.String(35), nullable=False)
    password        = sqlalchemy.Column(sqlalchemy.String(35), nullable=False)
    email           = sqlalchemy.Column(sqlalchemy.String(35))
    contact         = sqlalchemy.Column(sqlalchemy.String(50))

    def __repr__(self):
       return "<User(name='%s',password='%s',contact='%s', email='%s')>" % (self.name,self.password,self.contact, self.email)

   
engine = sqlalchemy.create_engine("sqlite:///user.db", echo='debug')
Base.metadata.create_all(engine)
DBsession = sqlalchemy.orm.sessionmaker(bind=engine)
session = DBsession()




def search(self,username,password):
    row = session.query(User).filter(User.name==username, User.password==password).first()
    if not row:
        return False
    else:
        return True
caller.py:
from modules.main import *
from modules.login import Ui_Dialog as Ui_login
from modules.signup import Ui_Dialog as Ui_signup
from modules.user import User,session,sqlalchemy,engine,DBsession


from PyQt4.QtGui import *
from PyQt4.QtCore import *
import sys

#user_data = User('user.db')
class Signup(QDialog,Ui_signup):
    def __init__(self,parent=None):
        QDialog.__init__(self,parent)
        self.setupUi(self)
        self.signupbutton.clicked.connect(self.addUser)
    
    def addUser(self):
        name = str(self.name.text())
        password = str(self.password.text())
        email = str(self.email.text())
        contact = str(self.contact.text())
        session.add(User(name=name, email=email,contact=contact,password=password))
        session.commit()

class Login(QDialog,Ui_login):
    def __init__(self,parent=None):  
        QDialog.__init__(self,parent)
        self.setupUi(self)
        self.loginbutton.clicked.connect(self.checkval)
        self.signupbutton.clicked.connect(self.generatesignup)
    
     
    def checkval(self):
        username = str(self.user.text())
        password = str(self.passs.text())
        

        
    
   
        
        
        
        
    
    
    def generatesignup(self):
        signupobj=Signup() 
        signupobj.exec_()

class MainWindow(QMainWindow,Ui_MainWindow):
    def __init__(self,parent=None):
        QMainWindow.__init__(self,parent)
        self.setupUi(self)
        self.checklogin()

    def checklogin(self):
        loginobj = Login()
        loginobj.exec_()

if __name__ == '__main__':
    app=QApplication(sys.argv)
    screen_resolution =app.desktop().screenGeometry()
    width,height=screen_resolution.width(),screen_resolution.height()
    w = MainWindow()
    w.resize(width,height)
    w.show()
    sys.exit(app.exec_())
This is what seems to work for the checkval function.Check val check if the user with username is in database.

def checkval(self):
        username= str(self.user.text())
        password=str(self.passs.text())
        row = session.query(User).filter(User.name==username, User.password==password).first()
        if not row:
            QtGui.QMessageBox.warning(
                self, 'Error', 'Wrong username or password')
        else:
            QtGui.QMessageBox.information(
                self, 'Success','Logged in'
            )
            self.accept()