Google+ Seguidores

lunes, 28 de marzo de 2016

Login en Tkinter y SQLite3

Login en Tkinter y SQLite3
Login en Tkinter y SQLite3
Esta entrada nace de una consulta realizada en Twitter (@PythonDiario), la consulta fue "si en el blog existía una entrada sobre el ingreso de usuario realizada con Python y SQLite3", la respuesta fue un "NO", no había nada sobre ingreso de usuarios y contraseñas (Login), así que me puse a buscar un poco de información, a escribir un poco de código para no oxidarme y listo, les comparto el sencillo Login que realice con Python, Tkinter y SQLite3.

Se aceptan todo tipo de sugerencias sobre seguridad, maneras de implementarlo, etc. Fue algo que hice de manera rápida y sencilla.

Repositorio en GitHub: https://github.com/pythondiario/Login-con-Tkinter-y-Python

Pasos para crear el Login


1 - Lo primero que hice fue crear una base de datos en SQLite3 con una tabla llamada "usuarios" (Si no tienes mucha idea de como utilizar SQLite3 y Python puedes pasarte por esta entrada: Python y SQLite3).
Para crear la base de datos de forma rápida utilice sqliteman (http://sqliteman.yarpen.cz/).
La tabla "usuarios" está compuesta por las columnas:
  • Usuario (Tipo text y Not Null)
  • pass (Tipo text y Not Null)
Dentro de Sqliteman agregué dos usuarios y sus respectivas contraseñas (acá aclaro que las contraseñas están en texto plano, no hice ninguna codificación de seguridad)

2 - Luego de estar creada la Base de Datos con los usuarios de prueba, echamos mano al código:

#!/usr/bin/python
# -*- coding: utf-8 -*-
# www.pythondiario.com

from Tkinter import *
from tkMessageBox import *
import sqlite3

ventana = Tk()
ventana.title ("------- Login Python Diario -------")
ventana.geometry ("350x150+500+250")
Label(ventana, text = "Usuario:").pack()
caja1 = Entry(ventana)
caja1.pack()

Label(ventana, text = "Contraseña:").pack()
caja2 = Entry(ventana, show = "*")
caja2.pack()

def login():
 # Connect to database
 db = sqlite3.connect('/home/diego123/Escritorio/login.db')
 c = db.cursor()
 
 usuario = caja1.get()
 contr = caja2.get()
 
 c.execute('SELECT * FROM usuarios WHERE usuario = ? AND pass = ?', (usuario, contr))
 
 if c.fetchall():
  showinfo(title = "Login correcto", message = "Usuario y contraseña correctos")
 else:
  showerror(title = "Login incorrecto", message = "Usuario o contraseña incorrecta")
  
 c.close()

Button (text = "Login", command = login).pack()


ventana.mainloop()

Login con Tkinter y Python
Login con Tkinter y Python

Ingreso correcto
Ingreso correcto

Ingreso incorrecto
Ingreso incorrecto

Análisis del código


En la primera parte del código importamos las librerías necesarias para crear la interfaz gráfica y poder trabajar con la base de datos:

#!/usr/bin/python
# -*- coding: utf-8 -*-
# www.pythondiario.com

from Tkinter import *
from tkMessageBox import *
import sqlite3

Luego creamos la interfaz en Tkinter que vamos a utilizar para autenticarnos:

ventana = Tk()
ventana.title ("------- Login Python Diario -------")
ventana.geometry ("350x150+500+250")
Label(ventana, text = "Usuario:").pack()
caja1 = Entry(ventana)
caja1.pack()

Label(ventana, text = "Contraseña:").pack()
caja2 = Entry(ventana, show = "*")
caja2.pack()

La función def login() lo que hace es comprobar cuando se pulse el botón "Login", que el usuario que se ingresa se corresponda con la contraseña ingresada. En caso afirmativo mostrará un mensaje de éxito, en el caso de que no coincida el usuario o la contraseña, mostrará un mensaje de error.
En el inicio de la función se crea la conexión con la base de datos, luego se hace una SELECT para obtener los datos y al final se cierra la conexión

def login():
 # Connect to database
 db = sqlite3.connect('/home/diego123/Escritorio/login.db')
 c = db.cursor()
 
 usuario = caja1.get()
 contr = caja2.get()
 
 c.execute('SELECT * FROM usuarios WHERE usuario = ? AND pass = ?', (usuario, contr))
 
 if c.fetchall():
  showinfo(title = "Login correcto", message = "Usuario y contraseña correctos")
 else:
  showerror(title = "Login incorrecto", message = "Usuario o contraseña incorrecta")
  
 c.close()

Por último y no menos importante, hacemos que la ventana se muestre siempre en pantalla:

ventana.mainloop()

Esto es todo amigos!!! Espero sus críticas!!!

11 comentarios :
Write comentarios
  1. Hola mi nombre es Moisés, quiero felicitarte por el trabajo que haces al publicar lo que has aprendido, que bueno mas que trabajo es tu pasión, una duda!! en Tkinter es posible aplicar estilos como css a los objetos de la GUI?, muchas gracias,

    ResponderEliminar
    Respuestas
    1. Hola Moises ,gracias por el comentario, por suerte ahora no soy yo solo, ya se han unido varios pythonistas para escribir en el blog ;). En cuanto a tu pregunta, puedes pasarte por este link: Widget Styling
      Quizá te sea de ayuda.
      Saludos

      Eliminar
  2. Diego Caraballo, grande hermano, la personas como ud que comparten conocimiento y enseñan a otros como yo que soy principiante, mis respetos. Ya estoy apuntado en el curso de Tkinter excedlente, TODO EXCELENTE

    ResponderEliminar
    Respuestas
    1. Gracias Randall por el comentario y por visitar el blog. Comentarios como el tuyo son los que motivan a seguir escribiendo. Saludos

      Eliminar
  3. Cómo hago para que se registre el usuario, es decir, que ponga un nombre y una contraseña y lo guardé en una base de datos

    ResponderEliminar
    Respuestas
    1. Si estudias un poco el código de esta entrada y averiguas como hacer "Insert" en Sqlite vas a poder implementarlo. Más adelante crearé una entrada sobre el tema.
      Saludos

      Eliminar
  4. Muito Obrigado, me ajudou muito... Gracias !!!!!!!!!!!!

    ResponderEliminar
    Respuestas
    1. Excelente Felipe, gracias por comentar y pasarte por el blog. Saludos

      Eliminar
  5. Would love to see the article in english, i was needed to use google translate, but the code comments were still in language i don't know
    But great work

    ResponderEliminar
  6. muy bueno, tengo una duda, con diccionario y archivo plano, se puede trabjar?, es que soy nuevo en esto...
    hice este code, pero falta algo, porque no da el print, aunque tenga registrado el usuario en el archivo plano, desde ya muchas gracias...
    mi CODE:
    from Tkinter import *
    from tkMessageBox import *

    ventana = Tk()
    ventana.title ("--- Identificate antes de Comenzar ---")
    ventana.geometry ("350x150+500+250")
    Label(ventana, text = "Usuario:").pack()
    caja1 = Entry(ventana)
    caja1.pack()

    def login():
    usuario = caja1.get()
    k=True
    c=0
    dic={}
    reg=[]
    a=open('usuarios.txt','a+')
    L=a.readline()
    while L!="":
    reg=L.split(",")
    dic[c] = {'codU':int(reg[0]),'NyA':reg[1],'Usu':reg[2],'PW':reg[3]}
    c=c+1
    L=a.readline()
    a.close

    while usuario!= "":
    i=0
    while i<c:
    CU=dic[i]['codU']
    if usuario == CU:
    print "asd"
    Button (text = "Entrar", command=login).pack()
    ventana.mainloop()

    ResponderEliminar

Tu comentario es importante y nos motiva a seguir escribiendo...

Entradas más recientes

Powered by Blogger .