lunes, 9 de septiembre de 2019

Módulo de Login y Registro en Python - Templates y menu

Con este post damos inicio al proyecto de desarrollo de un Módulo de Login y Registro de Usuario en Python. Como requerimiento es necesario que tengas instalado Python 3. Así como también recomendamos crees un entorno virtual para gestionar los paquetes que se instalarán en tu app. Si aun no sabes como crear un entorno virtual para tus proyectos, te sugerimos leas esto primero --> Creación de entorno virtual.

Hoy iniciaremos creando la estructura inicial de nuestro proyecto y desarrollando el template/menu para solicitar y mostrar la información por consola. El código presentado a continuación la puedes clonar desde mi cuenta github.

ESTRUCTURA DE LA APP

app  # paquete app
  |-> main.py  # archivo principal del app
  |-> menu.py  # funciones para los menús del app  
La estructura tiene un paquete llamado app. Dentro de él dos archivos .py, el main donde se concentrará la gestión principal de la app, y menu donde estará la clase y métodos para mostrar el menú y solicitar los datos al usuario.

DESARROLLANDO EL MENÚ

En el archivo menu.py se crea una clase para mostrar la plantillas y menú del proyecto. El código es el siguiente:
# -*- coding: utf-8 -*-
import os

class MenuTemplate():
    def __init__(self,
                 title = "Tratado Tecnologico"):
        self.title = title
        self.clean = "clear" if os.name == "posix" else "cls"
    
    def clean_screen(self):
        os.system(self.clean)

    def head(self):
        print("\t-------------------------------------------------------")
        print("\t\t\t{}".format(self.title))
        print("\t Bienvenido al Módulo de Lógin y Registro de Usuarios")
        print("\t-------------------------------------------------------")
 
    def main_menu(self):
        self.clean_screen()
        self.head()
        print("1.- Registrar")
        print("2.- Logear")
        print("3.- Salir")
        opcion = input("Seleccione una opción --> ")
        return opcion

    def register(self):
        self.clean_screen()
        self.head()
        username = input("Ingrese username: ")
        email = input("Ingrese email: ")
        password1 = input("Ingrese password: ")
        password2 = input("Repita el password: ")
        return {
            "username": username,
            "email": email,
            "password1": password1,
            "password2": password2,
        }

    def login(self):
        self.clean_screen()
        self.head()
        username = input("Ingrese username: ")
        password = input("Ingrese password: ")
        return {
            "username": username,
            "password": password,
        }

    def exit_text(self):
        self.clean_screen() 
        self.head()
        print("\n")
        print("Gracias por usar nuestro sistema")

 La clase se llama MenuTemplate cuyos métodos son los siguientes:
  • __init__: Es el constructor de la clase. Su función es inicializar el objeto; esto es, cuando se crea un objeto de esta clase se ejecutará este método de forma automática. Él recibe como argumento self y title, el primer argumento es la que permite a __init__ (y como se verá más adelante también a los demás métodos) acceder a los atributos y métodos de la clase; en sí es como si le pasáramos la clase como argumento. El argumento title es un dato que debe ser pasado cuando se instancia el clase y si no se pasa él tomará como valor por defecto el string "Tratado Tecnológico". Dentro del método se asigna el valor de title a un atributo de la clase con el mismo nombre (self.title); asimismo se le asigna a un atributo llamado clean el comando para limpiar la pantalla; para ello se usa el módulo os importado al inicio y se le pasa el comando dependiendo del sistema operativo donde se ejecute el programa (self.clean = "clear" if os.name == "posix" else "cls").
  • clean_screen: Con este método limpiamos la pantalla de la consola. Nótese que hace uso del atributo clean inicializado en __init__ y al ser llamado éste método se ejecuta un comando del sistema operativo para limpiar la consola (os.system(self.clean)).
  • head: Es un método genérico que mostrará un encabezado en los menú del proyecto. Como se puede observar él hace uso del atributo title para mostrarlo en el encabezado.
  • main_menu: Con esto se muestra el menú inicial donde se le pide al usuario que indique lo que desea hacer: 1.-Registrarse, 2.-Logear o 3.-Salir. Antes de mostrar este texto se limpia la pantalla y se imprime el encabezado. Fíjense que para acceder a los atributos y métodos de la clase se debe anteponer el prefijo self seguido de punto (.), es por ello que para usar el método clean_screen se hace self.clean_screen, lo mismo se hace para el método head. Posterioemente se captura la tecla presionada por el usuario mediante la instrucción input, la cual se asigna a la variable opcion para luego retornarla.
  • register: Este método permite al usuario ingresar los datos de registro: username, email, password1 y password2, y se retorna los datos como un diccionario.
  • login: El método login solicita los datos para logearse: username y password, para luego retornar la información en forma de diccionario.
  • exit_text: Con él se muestra un texto de despedida al salirse del programa.

CONSTRUYENDO EL MAIN
En el archivo main.py concentra la estructura del programa. Así es el código de este archivo:

# -*- coding: utf-8 -*-
import time
from menu import MenuTemplate

def main():
    menu = MenuTemplate()
    opcion = menu.main_menu()

    if opcion == "1":
        data = menu.register()
        print("Los datos de registro son: ")
        print(data)
        time.sleep(2)
        main()
    elif opcion == "2":
        data = menu.login()
        print("Los datos de ingreso son: ")
        print(data)
        time.sleep(2)
        main()
    elif opcion == "3":
        menu.exit_text()
        time.sleep(2)
        menu.clean_screen()
    else: 
        print("\n Opción incorrecta. Intente de nuevo")
        time.sleep(2)
        main()

main()

Por los momentos se usará este archivo para validar la opción seleccionado por el usuario y para mostrar los datos que se han ingresado en el registro y login. Nótese que se tiene una función llamada main() (def main()), la cual se llama para que se ejecuté al final. Dentro de la función:
  • Se instancia la clase MenuTemplate(); para ello es necesario importarlo desde el archivo menu.py (from menu import MenuTemplate). Cuando se instanció la clase no se pasó el argumento title, por lo que tomará su valor por defecto. Sin embargo se pudo crear el objeto de esta forma MenuTemplate("Mi sistema") para asignarle el título al encabezado.
  • Se recibe la opción del menu inicial con opcion = menu.main_menu().
  • Se evalúa las opciones con los if. Si es una de las evaluadas se muestra los datos correspondiente; sino se vuelve a mostrar el menú inicial.
  • La función time.sleep hace que el programa se detenga por 2 segundos.
Para correr el programa habrá la consola, dirígete a path donde se encuentra el archivo main.py y ejecute python3 main.py.
Con esto concluimos esta post. Por los momentos sólo se ingresarán los datos y se mostrarán. En el siguiente post asignaremos esos datos en un arreglo y haremos algunas validaciones iniciales. 
Espero lo hayan disfrutado y sigan este tutorial. ¡Nos vemos!

0 comentarios:

Publicar un comentario