Google+ Seguidores

lunes, 28 de marzo de 2016

Login en Tkinter y SQLite3

    4

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!!!

4 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

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

Entradas más recientes

© 2014 Mi diario Python. Designed by Bloggertheme9 | Distributed By Gooyaabi Templates
Powered by Blogger.