Skip to content

Laboratorio de Usuario

Tatiana Tamara, Giménez Ríos edited this page Sep 11, 2023 · 3 revisions

INTEGRANTES

Renzo Espinola, Alejo Gutierrez, Matias Ivan, Tatiana Giménez Ríos

CODIGO

class Usuario:
def __init__(self, id_usuario=None, username=None, password=None):
    self._id_usuario = id_usuario
    self._username = username
    self._pasword = password

def __str__(self):
    return f'Usuario: {self._id_usuario} {self._username} {self._pasword}'

# Se encapsulan los atributos
@property
def id_usuario(self):
    return self._id_usuario

@id_usuario.setter
def id_usuario(self, id_usuario):
    self._id_usuario = id_usuario

@property
def username(self):
    return self._username

@username.setter
def username(self, username):
    self._username = username

@property
def password(self):
    return self._pasword

@password.setter
def password(self, password):
    self._pasword = password

EXPLICACION

Este código muestra la definición de una clase llamada Usuario en Python. La clase parece representar a un usuario con atributos como id_usuario, username y password. Además, la clase incluye métodos para encapsular y acceder a estos atributos. Aquí está la explicación del código:

  1. Constructor __init__:

    • El método __init__ es el constructor de la clase. Recibe tres parámetros: id_usuario, username y password. Estos parámetros se utilizan para inicializar los atributos de la instancia de la clase.
    • Los atributos de la instancia (_id_usuario, _username y _pasword) se inicializan con los valores proporcionados como argumentos al constructor. El prefijo _ indica que estos atributos son considerados como "privados" por convención, aunque Python no impide el acceso directo a ellos.
  2. Método __str__:

    • Este método especial __str__ se utiliza para definir cómo se debe representar la instancia de la clase como una cadena cuando se llama a la función str() o cuando se utiliza la función print().
    • En este caso, el método __str__ devuelve una cadena que muestra los valores de los atributos _id_usuario, _username y _pasword de la instancia.
  3. Encapsulamiento de Atributos:

    • Los atributos de la clase (id_usuario, username y password) se encapsulan utilizando decoradores @property y métodos setter correspondientes.
    • Por ejemplo, el método @property id_usuario permite acceder al atributo _id_usuario, y el método id_usuario.setter permite establecer su valor.
    • Esto se hace para seguir el principio de encapsulación y controlar el acceso y modificación de los atributos.

En resumen, la clase Usuario representa un modelo de usuario con tres atributos: id_usuario, username y password. Los atributos se inicializan en el constructor, y se proporcionan métodos getter y setter para acceder y modificar estos atributos. El método __str__ permite obtener una representación legible del objeto como cadena de texto.

CODIGO

from PYTHON.Leccion07.capa_datos_persona.cursor_del_pool import CursorDelPool
from PYTHON.Leccion07.capa_datos_persona.usuario import Usuario
from logger_base import log

class UsuarioDao:
'''
DAO -> Data Access Object Para la tabla de usuario
CRUD -> Create - Read - Update - Delete
'''

_SELECT = 'SELECT * FROM usuario ORDER BY id_usuario'
_INSERTAR = 'INSERT INTO usuario(username, password) VALUE (%s, %s)'
_ACTUALIZAR = 'UPDATE usuario SET username=%s, password=%s WHERE id_usuario=%s'
_ELIMINAR = 'DELETE FROM usuario WHERE id_usuario=%s'

@classmethod
def seleccionar(cls):
    with CursorDelPool() as cursor:
        log.debug('Seleccionando usuarios')
        cursor.execute(cls._SELECT)
        registros = cursor.fetchall()
        usuarios = []
        for registro in registros:
            usuario = Usuario(registro[0], registro[1], registro[2])
            usuarios.append(usuario)
        return usuarios

@classmethod
def insertar(cls, usuario):
    with CursorDelPool() as cursor:
        log.debug(f'Usuario a insertar: {usuario}')
        valores = (usuario.username, usuario.password)
        cursor.execute(cls._INSERTAR, valores)
        return cursor.rowcount

@classmethod
def actualizar(cls, usuario):
    with CursorDelPool() as cursor:
        log.debug(f'Usuario a actualizar: {usuario}')
        valores = (usuario.username, usuario.password, usuario.id_usuario)
        cursor.execute(cls._ACTUALIZAR, valores)
        return cursor.rowcount

@classmethod
def eliminar(cls, usuario):
    with CursorDelPool() as cursor:
        log.debug(f'Usuario a eliminar: {usuario}')
        valores = (usuario.id_usuario,)
        cursor.execute(cls._ELIMINAR, valores)
        return cursor.rowcount

EXPLICACION

Este código es un ejemplo de una clase llamada UsuarioDao que implementa la capa de acceso a datos (Data Access Object o DAO) para la tabla de usuarios en una base de datos. Esta clase proporciona métodos para realizar operaciones CRUD (Create, Read, Update, Delete) en la tabla de usuarios. Aquí está la explicación del código:

  1. Importaciones:

    • La clase importa dos módulos: CursorDelPool y Usuario de ubicaciones específicas en el proyecto, así como un módulo llamado log que se asume que proporciona funciones de registro.
  2. Clase UsuarioDao:

    • Esta es la clase principal que implementa la funcionalidad del DAO para los usuarios.
  3. Constantes de SQL:

    • La clase define constantes para las consultas SQL que se utilizarán en las operaciones CRUD. Por ejemplo, _SELECT contiene una consulta para seleccionar todos los usuarios, _INSERTAR para insertar un nuevo usuario, _ACTUALIZAR para actualizar un usuario existente y _ELIMINAR para eliminar un usuario.
  4. Métodos estáticos:

    • Los métodos de la clase son estáticos (@classmethod) para que puedan ser llamados directamente en lugar de requerir una instancia de la clase.
  5. Método seleccionar:

    • Este método ejecuta la consulta _SELECT para seleccionar todos los usuarios de la tabla. Utiliza un objeto CursorDelPool para ejecutar la consulta y recopilar los resultados en una lista de objetos Usuario, que se devuelven como resultado.
  6. Método insertar:

    • Este método toma un objeto Usuario como argumento y lo inserta en la base de datos utilizando la consulta _INSERTAR. Los valores se pasan como una tupla y se ejecuta la consulta utilizando un objeto CursorDelPool. El método devuelve el número de filas afectadas.
  7. Método actualizar:

    • Este método toma un objeto Usuario como argumento y actualiza sus valores en la base de datos utilizando la consulta _ACTUALIZAR. Los valores se pasan como una tupla y se ejecuta la consulta utilizando un objeto CursorDelPool. El método devuelve el número de filas afectadas.
  8. Método eliminar:

    • Este método toma un objeto Usuario como argumento y lo elimina de la base de datos utilizando la consulta _ELIMINAR. El método se ejecuta utilizando un objeto CursorDelPool y devuelve el número de filas afectadas.

En resumen, esta clase UsuarioDao encapsula la lógica de acceso a datos para la tabla de usuarios en una base de datos. Proporciona métodos para seleccionar, insertar, actualizar y eliminar registros de usuarios en la base de datos. Estos métodos se comunican con la base de datos a través de un objeto CursorDelPool, que se asume que maneja la conexión y ejecución de consultas SQL.

CODIGO

from capa_datos_persona.usuarioDAO import UsuarioDAO
from logger_base import log
from capa_datos_persona.usuario import Usuario

opcion = None
while opcion != 5:
print("Opciones: ")
print("1). Listar Usuarios")
print("2). Agregar Usuario")
print("3). Modificar Usuario")
print("4). Eliminar Usuario")
print("5). Salir")
opcion = int(input("Digite la opcion (1-5): "))
if opcion == 1:
    usuarios = UsuarioDAO.seleccionar()
    for usuario in usuarios:
        log.info(usuario)
elif opcion == 2:
    username_var = input('Digite el nombre de usuario: ')
    password_var = input('Digite su contraseña: ')
    usuario = Usuario(username=username_var, password=password_var)
    usuario_insertado = UsuarioDAO.insertar(usuario)
    log.info(f'Usuario insertado: {usuario_insertado}')
elif opcion == 3:
    id_usuario_var = int(input('Digite el ID del usuario a modificar: '))
    username_var = input('Digite el nombre del usuario a modificar: ')
    password_var = input('Digite la contraseña del usuario a modificar: ')
    usuario = Usuario(id_usuario=id_usuario_var, username=username_var, password=password_var)
    usuario_actualizado = UsuarioDAO.actualizar(usuario)
    log.info(f'Usuario actualizado: {usuario_actualizado}')
elif opcion == 4:
    id_usuario_var = int(input('Digite el id del usuario a eliminar: '))
    usuario = Usuario(id_usuario=id_usuario_var)
    usuario_eliminado = UsuarioDAO.eliminar(usuario)
    log.info(f'Usuario eliminado: {usuario_eliminado}')
else:
log.info('Salimos de la aplicación, Hasta pronto!')

EXPLICACION

Este código es un programa en Python que interactúa con una base de datos de usuarios a través de un objeto UsuarioDAO. El programa presenta un menú de opciones al usuario para realizar operaciones CRUD (Crear, Leer, Actualizar, Eliminar) en la tabla de usuarios de la base de datos. Aquí tienes una explicación del código:

  1. Importaciones:

    • Se importa la clase UsuarioDAO que proporciona métodos para interactuar con la base de datos.
    • También se importa un módulo llamado log que se asume que proporciona funciones de registro.
    • Se importa la clase Usuario que se utiliza para crear objetos de usuario.
  2. Bucle While:

    • Se utiliza un bucle while que se ejecuta hasta que la variable opcion sea igual a 5. Esta variable se utiliza para controlar el flujo del programa y salir cuando el usuario elige la opción 5 (Salir).
  3. Menú de Opciones:

    • El programa muestra un menú de opciones en la consola, que incluye las siguientes opciones:
      • Listar Usuarios
      • Agregar Usuario
      • Modificar Usuario
      • Eliminar Usuario
      • Salir
    • El usuario selecciona una opción ingresando un número del 1 al 5.
  4. Manejo de Opciones:

    • El programa utiliza una serie de estructuras if y elif para manejar la opción seleccionada por el usuario.
  5. Opción 1 - Listar Usuarios:

    • Si el usuario selecciona la opción 1, se llama al método seleccionar de UsuarioDAO para recuperar todos los usuarios de la base de datos y se muestra cada usuario en la consola utilizando el objeto log.
  6. Opción 2 - Agregar Usuario:

    • Si el usuario selecciona la opción 2, el programa solicita al usuario que ingrese un nombre de usuario y una contraseña. Luego, se crea un objeto Usuario con estos valores y se llama al método insertar de UsuarioDAO para agregar el usuario a la base de datos.
  7. Opción 3 - Modificar Usuario:

    • Si el usuario selecciona la opción 3, el programa solicita al usuario que ingrese el ID del usuario que desea modificar, así como el nuevo nombre de usuario y contraseña. Luego, se crea un objeto Usuario con estos valores y se llama al método actualizar de UsuarioDAO para actualizar el usuario en la base de datos.
  8. Opción 4 - Eliminar Usuario:

    • Si el usuario selecciona la opción 4, el programa solicita al usuario que ingrese el ID del usuario que desea eliminar. Luego, se crea un objeto Usuario con este ID y se llama al método eliminar de UsuarioDAO para eliminar el usuario de la base de datos.
  9. Salida del Programa:

    • Cuando el usuario selecciona la opción 5 (Salir), el programa muestra un mensaje de despedida y finaliza.

En resumen, este programa interactúa con una base de datos de usuarios y permite al usuario realizar operaciones de administración de usuarios a través de un menú interactivo en la consola. Las operaciones CRUD se realizan utilizando métodos de la clase UsuarioDAO. El registro de actividad se realiza mediante el objeto log.

URL: https://github.com/CodeSystem2022/ChacoDevsTeam-4SEM/tree/master/PYTHON/Leccion07/capa_datos_persona

Clone this wiki locally