Programa en Python que solicite Nombre de Usuario y Contraseña
Con este programa validaremos un nombre de usuario y la contraseña, en base a otro codigo para que este programa sea aun más complejo http://pythoninicios.blogspot.mx/2015/09/validar-usuario-y-contrasena-en-python.html
El Codigo a Continuación es para nuestra Ventana :
El Codigo a Continuación es para nuestra Ventana :
from tkinter import * from tkinter.messagebox import * from LogInAvanzado.UserF import * #En Python 3.X, para poder llamar una "clase" es necesario usar 'from' Y escribir el nombre de nuestro Paquete/Directorio y con punto '.' llamamas nuestro archivofrom LogInAvanzado.PassF import clave #Tambien podemos definir que queremos importar de ese archivo, en este caso la funcion "clave" def checkUser(): #Esta Funcion se encarga de verificar que la Entrada del Usuario sea valida de acuerdo a los parametros requeridos (más de 8 caracteres, menos de 12, Alfanumerico) if nickname(CatchUser.get()) == True: showinfo("Exito!","Nombre de Usuario Valido!") confirm_user.config(fg="Green") TUser.config(fg="Green") TPassword.grid() #Teniendo ya definido el Grid de nuestra etiqueta, poner solo .grid() lo hara visible de nuevo, esto es valido para la mayoria de los objetos que se hayan puesto en el grid() CatchPsswd.grid() confirm_pssw.grid() ready_req.grid() CatchUser.config(state="disabled") #Con la funcion .config y el parametro 'State' en "Disabled" nosotros deshabilitamos este elemento grafico, asi impedimos que el Usuario pueda alterar el valor ingresado y capturado else: confirm_user.config(fg="Red") TUser.config(fg="Red") def checkPssw(): if clave(CatchPsswd.get())==True: showinfo("Exito!","Contraseña Valida!") confirm_pssw.config(fg="Green") TPassword.config(fg="Green") else: confirm_pssw.config(fg="Red") TPassword.config(fg="Red") def CompleteRequest(): if nickname(CatchUser.get()) == True and clave(CatchPsswd.get()) == True: TUser.config(fg="Green") TPassword.config(fg="Green") CatchUser.config(bg="Green", fg="White") CatchPsswd.config(bg="Green", fg="White") showinfo("Felicidades!","Usuario y Contraseña creados exitosamente!") else: TUser.config(fg="Red") TPassword.config(fg="Red") def reiniciar(): #Esta función se encarga de limpiar la interfaz, es decir volver la interfaz al principio TUser.config(fg="black") TPassword.config(fg="black") CatchUser.config(bg="white", fg="black") CatchUser.delete(0, END) #la Función .delete() se encarga de "Borrar" el contenido de los elementos, en este caso, nuestro Entry quedara vacio pero conserva sus caracteristicas CatchPsswd.config(bg="white", fg="black") CatchPsswd.delete(0,END) confirm_user.config(fg="black") confirm_pssw.config(fg="black") TPassword.grid_remove() CatchPsswd.grid_remove() confirm_pssw.grid_remove() ready_req.grid_remove() CatchUser.config(state="normal") app = Tk() app.title("Control de Acceso") app.geometry("600x400") app.config(bg="Crimson") vp = Frame(app) vp.grid(column=0, row=0, padx=(50,50), pady=(10,10)) vp.rowconfigure(0, weight=1) vp.columnconfigure(0, weight=1) vp.config(bg="#F0F0F0") TUser = Label(vp, text="Usuario: ") TUser.grid(column=1, row=1, sticky=E, padx=(10,10),pady=(10,10)) TPassword = Label(vp, text="Contraseña: ") TPassword.grid(column=1, row=2, sticky=E, padx=(10,10), pady=(10,10)) TPassword.grid_remove() #La Función .grid_remove() "remueve" el elemento Grafico, pero conserva sus datos tales como Columna, Renglon, etc. Esto es Valido para la mayoria de los elementos de Tkinter field1 = ""CatchUser = Entry(vp, width=20, textvariable=field1) CatchUser.grid(column=2, row=1, padx=(10,10)) field2 = ""CatchPsswd = Entry(vp, width=20, show='•', textvariable=field2) CatchPsswd.grid(column=2, row=2, padx=(10,10)) CatchPsswd.grid_remove() confirm_user = Button(vp, text="Verificar Usuario", command=checkUser) confirm_user.grid(column=3, row=1, padx=(10,10), pady=(10,10)) confirm_pssw = Button(vp, text="Comprobar Contraseña", command=checkPssw) confirm_pssw.grid(column=3, row=2, padx=(10,10), pady=(10,10)) confirm_pssw.grid_remove() ready_req = Button(vp, text="Listo", command=CompleteRequest) ready_req.grid(column=1, row=3, padx=(10,10), pady=(10,10)) ready_req.grid_remove() resetGUI = Button(vp, text="Limpiar Registro", command=reiniciar) resetGUI.grid(column=2,row=3, padx=(10,10), pady=(10,10), sticky=E) app.mainloop()
El Codigo acontinuación es exactamente similar a como se encuentra en el blog anterior, la diferencia es
el uso de "MessageBox" de Tkinter para mostrar un Error (es la unica diferencia)
from tkinter.messagebox import * def nickname(nombre_usuario): long = len(nombre_usuario) # Cuenta la cantidad de caracteres en la cadena de Texto y = nombre_usuario.isalnum() # analiza que la cadena de Texto no contenga Caracteres que no sean Alfanumericos (0-9 ; a-z ; A-Z) if y == False: # con isalnum() verifica que sea un valor Falso, si es verdadero, el codigo prosigue showerror("Error Caracteres no Validos","El nombre de usuario puede contener solo letras y números") if long < 6: #verifica que la cadena de caracteres no posea menos de 6 Caracteres showerror("Error Tamaño","El nombre de usuario debe contener al menos 6 caracteres") if long > 12: #Verifica que la cadena de caracteres no posea más de 12 Caracteres showerror("Error Tamaño excedido","El nombre de usuario no puede contener más de 12 caracteres") if long > 5 and long < 13 and y == True: #Si todas las secuencias se cumplen, retorna un valor verdadero a la función return True # Verdadero si el tamaño es apropiado
El Codigo acontinuación es exactamente similar a como se encuentra en el Blog Mencionado, los cambios son los mismos que en el codigo anterior
from tkinter.messagebox import *
def clave(password):
validar = False # variable para verificar que las comparaciónes se cumplan como VERDADERAS long = len(password) # Cuenta los Caracteres en la cadena de Texto "Contraseña" espacio = False # Variable utilizada para analizar si contiene espaciós o no con ayuda de una comparación mayuscula = False # variable para identificar letras mayúsculas minuscula = False # variable para contar identificar letras minúsculas numeros = False # variable para identificar números y = password.isalnum() # si es alfanumérica retona True correcto = True # verifica que hayan mayuscula, minuscula, numeros y no alfanuméricos
for carac in password: # ciclo for que recorre caracter por caracter en la contraseña
if carac.isspace() == True: # .isspace() es una Funcion que busca si uno de los caracteres es un Espacio espacio = True # si encuentra un espacio se cambia el valor a True, ya que inicialmente es Falso
if carac.isupper() == True: # .isupper() es una Funcion que busca en la cadena de caracteres si al menos un Caracter esta es Mayusculas mayuscula = True # si se encuentra una Mayuscula se cambia el valor a True, ya que inicialmente es Falso
if carac.islower() == True: # .islower() es una Funcion que busca en la cadena de caracteres si al menos un Caracter esta en minusculas minuscula = True # Si se encuentra una minuscula se cambia el valor a True, ya que inicialmente es Falso
if carac.isdigit() == True: # isdigit() es una Funcion que busca en la cadena de caracteres si al menos un Caracter es un Digito (0-9) numeros = True # Si se encuentra un Digito cambia el valor a True, ya que inicialmente es Falso
if espacio == True: # Si hay un Espacio (que se busca inicialmente en el ciclo for) mostrara el siguiente mensaje showerror("Error SpaceBar","La contraseña no puede contener espacios")
else:
validar = True # Si no posee espacios, procede a la siguiente comparación if long < 8 and validar == True:
showerror("Error Tamaño","Mínimo 8 caracteres")
validar = False # cambia a False si no se cumple el requisito mínimo de caracteres
if mayuscula == True and minuscula == True and numeros == True and y == False and validar == True:
validar = True # Cumple el requisito de tener mayuscula, minuscula, numeros y no alfanuméricos else:
correcto = False # uno o mas requisitos de mayuscula, minuscula, numeros y no alfanuméricos no se cumple
if validar == True and correcto == False:
showerror("Error Seguridad","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 validar == True and correcto == True:
return True
Comentarios
Publicar un comentario