jueves, 16 de junio de 2016

VALIDAR USUARIO Y CONTRASEÑA EN PYTHON Y PYQT4


Hola a todos voy a realizar un ejercicio que veo que consultan mucho en el BLOG, consta de pasarlo a PyQt4.


Es ejercicio también lo modifiqué y digamos que lo reduje en comparación con el descrito en el enlace.

La siguiente imagen corresponde a la ventana inicial que nos mostrará el programa.

Este es el código generado para obtener la ventana de la imagen anterior se llama prueba.py, convertida de .ui a .py. En el BLOG también enseñaré a realizar esta conversión y lo explicaré pronto. Dejaré el enlace en poco tiempo.

prueba.py
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'prueba.ui'
#
# Created by: PyQt4 UI code generator 4.11.4
#
# 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(568, 189)
        self.centralwidget = QtGui.QWidget(MainWindow)
        self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
        self.gridLayout = QtGui.QGridLayout(self.centralwidget)
        self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
        self.label_USUARIO = QtGui.QLabel(self.centralwidget)
        self.label_USUARIO.setObjectName(_fromUtf8("label_USUARIO"))
        self.gridLayout.addWidget(self.label_USUARIO, 0, 0, 1, 1)
        self.lineEdit_USUARIO = QtGui.QLineEdit(self.centralwidget)
        self.lineEdit_USUARIO.setObjectName(_fromUtf8("lineEdit_USUARIO"))
        self.gridLayout.addWidget(self.lineEdit_USUARIO, 0, 1, 1, 1)
        self.pushButton_ACEPUSER = QtGui.QPushButton(self.centralwidget)
        self.pushButton_ACEPUSER.setObjectName(_fromUtf8("pushButton_ACEPUSER"))
        self.gridLayout.addWidget(self.pushButton_ACEPUSER, 0, 2, 1, 1)
        self.label_MSJUSER = QtGui.QLabel(self.centralwidget)
        self.label_MSJUSER.setText(_fromUtf8(""))
        self.label_MSJUSER.setObjectName(_fromUtf8("label_MSJUSER"))
        self.gridLayout.addWidget(self.label_MSJUSER, 1, 0, 1, 3)
        self.label_PASSWORD = QtGui.QLabel(self.centralwidget)
        self.label_PASSWORD.setObjectName(_fromUtf8("label_PASSWORD"))
        self.gridLayout.addWidget(self.label_PASSWORD, 2, 0, 1, 1)
        self.lineEdit_PASSWORD = QtGui.QLineEdit(self.centralwidget)
        self.lineEdit_PASSWORD.setObjectName(_fromUtf8("lineEdit_PASSWORD"))
        self.gridLayout.addWidget(self.lineEdit_PASSWORD, 2, 1, 1, 1)
        self.pushButton_ACEPPASS = QtGui.QPushButton(self.centralwidget)
        self.pushButton_ACEPPASS.setObjectName(_fromUtf8("pushButton_ACEPPASS"))
        self.gridLayout.addWidget(self.pushButton_ACEPPASS, 2, 2, 1, 1)
        self.label_MSJPASS = QtGui.QLabel(self.centralwidget)
        self.label_MSJPASS.setText(_fromUtf8(""))
        self.label_MSJPASS.setObjectName(_fromUtf8("label_MSJPASS"))
        self.gridLayout.addWidget(self.label_MSJPASS, 3, 0, 1, 3)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtGui.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 568, 21))
        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)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None))
        self.label_USUARIO.setText(_translate("MainWindow", "USUARIO:", None))
        self.pushButton_ACEPUSER.setText(_translate("MainWindow", "ACEPTAR", None))
        self.label_PASSWORD.setText(_translate("MainWindow", "PASSWORD:", None))
        self.pushButton_ACEPPASS.setText(_translate("MainWindow", "ACEPTAR", None))

El siguiente código se llama validador.py y llama a prueba.py para invocar la interfaz gráfica.

validador.py
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import sys

from prueba import *

class Miformulario(QtGui.QMainWindow):
    def __init__(self,parent=None):
        QtGui.QMainWindow.__init__(self,parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        QtCore.QObject.connect(self.ui.pushButton_ACEPUSER, QtCore.SIGNAL('clicked()'), self.mensaje_usuario)
        QtCore.QObject.connect(self.ui.pushButton_ACEPPASS, QtCore.SIGNAL('clicked()'), self.mensaje_password)

    def mensaje_usuario(self):

        long=len(self.ui.lineEdit_USUARIO.text())
        y=self.ui.lineEdit_USUARIO.text().isalnum()
        
        if y==False:
            self.ui.label_MSJUSER.setText("El nombre de usuario puede contener solo letras y números")
            self.ui.lineEdit_USUARIO.clear() #Borra el campo donde se escribe la contraseña
        if long < 6: 
            self.ui.label_MSJUSER.setText("El nombre de usuario debe contener al menos 6 caracteres")
            self.ui.lineEdit_USUARIO.clear() #Borra el campo donde se escribe la contraseña
        if long > 12: 
            self.ui.label_MSJUSER.setText("El nombre de usuario no puede contener más de 12 caracteres")
            self.ui.lineEdit_USUARIO.clear() #Borra el campo donde se escribe la contraseña
        if long >5 and long <13 and y ==True:
            self.ui.label_MSJUSER.setText("Usuario creado correctamente")
            

    def mensaje_password(self):
            
        user=False  #variable de inicialización para identificar espacios
        validar=False #variable de inicialización para identificar número de caracteres
        long=len(self.ui.lineEdit_PASSWORD.text()) #Calcula la longitud de la contraseña
        y=self.ui.lineEdit_PASSWORD.text().isalnum()#True si es alfanumérica, False si no lo es.(Nos interesa que sea False)
        mayuscula=False #variable iniciliazción para contar las letras mayúsculas
        minuscula=False #variable iniciliazción para contar las letras minúsculas
        numeros=False #variable iniciliazción para contar los números
        correcto=True

        for carac in self.ui.lineEdit_PASSWORD.text(): #ciclo for que recorre caracter por caracter en la contraseña

            if carac.isspace()==True: #Saber si el caracter es un espacio
                user=True #si encuentra un espacio se cambia el valor a True

            if carac.isupper()== True: #saber si hay mayuscula
                    mayuscula=True #Si encuentra al menos una Mayuscula cambia a True
                
            if carac.islower()== True: #saber si hay minúsculas
                    minuscula=True #Si encuentra al menos una minúscula cambia a True
                
            if carac.isdigit()== True: #saber si hay números
                    numeros=True #Si encuentra al menos un número cambia a True

        if user==True: #este valor indica que encontró un espacio
            self.ui.label_MSJPASS.setText("La contraseña no puede contener espacios")
            self.ui.lineEdit_PASSWORD.clear() #Borra el campo donde se escribe la contraseña
            
        else:
            validar=True #se escoge con el fin de garantizar que no hay espacios
            #y pasar al número mínimo de caracteres que contiene la contraseña
            
                       
        if long <8 and validar==True: #Se garantiza que la contraseña posea mínimo 8 caracteres sin espacios.
            self.ui.label_MSJPASS.setText("Mínimo 8 caracteres")
            self.ui.lineEdit_PASSWORD.clear() #Borra el campo donde se escribe la contraseña
            validar=False


        if mayuscula==True and minuscula==True and numeros==True and y==False and validar==True:  
            self.ui.label_MSJPASS.setText("La contraseña es correcta")
        else:
            correcto=False #Quiere decir que no cumple al menos uno de los requisitos

        if correcto==False and validar==True: #No cumpla al menos un requisito, no contiene espacios y es mayor o igual a 8 caracteres.
            self.ui.lineEdit_PASSWORD.clear()
            self.ui.label_MSJPASS.setText("La contraseña elegida no es segura: debe contener letras minúsculas, mayúsculas, números y al menos 1 carácter no alfanumérico")

if __name__== "__main__":
    app=QtGui.QApplication(sys.argv)
    myapp = Miformulario()
    myapp.show()
    sys.exit(app.exec_())

Este es un ejemplo cuando se cumplen todas las condiciones requeridas por el ejercicio.

Muchas Gracias, cualquier duda o sugerencia me dejan el mensaje.

1 comentario: