Repository navigation
Laboratorio de Usuario
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
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:
-
Constructor
__init__:- El método
__init__es el constructor de la clase. Recibe tres parámetros:id_usuario,usernameypassword. Estos parámetros se utilizan para inicializar los atributos de la instancia de la clase. - Los atributos de la instancia (
_id_usuario,_usernamey_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.
- El método
-
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ónstr()o cuando se utiliza la funciónprint(). - En este caso, el método
__str__devuelve una cadena que muestra los valores de los atributos_id_usuario,_usernamey_paswordde la instancia.
- Este método especial
-
Encapsulamiento de Atributos:
- Los atributos de la clase (
id_usuario,usernameypassword) se encapsulan utilizando decoradores@propertyy métodos setter correspondientes. - Por ejemplo, el método
@propertyid_usuariopermite acceder al atributo_id_usuario, y el métodoid_usuario.setterpermite establecer su valor. - Esto se hace para seguir el principio de encapsulación y controlar el acceso y modificación de los atributos.
- Los atributos de la clase (
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.
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
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:
-
Importaciones:
- La clase importa dos módulos:
CursorDelPoolyUsuariode ubicaciones específicas en el proyecto, así como un módulo llamadologque se asume que proporciona funciones de registro.
- La clase importa dos módulos:
-
Clase
UsuarioDao:- Esta es la clase principal que implementa la funcionalidad del DAO para los usuarios.
-
Constantes de SQL:
- La clase define constantes para las consultas SQL que se utilizarán en las operaciones CRUD. Por ejemplo,
_SELECTcontiene una consulta para seleccionar todos los usuarios,_INSERTARpara insertar un nuevo usuario,_ACTUALIZARpara actualizar un usuario existente y_ELIMINARpara eliminar un usuario.
- La clase define constantes para las consultas SQL que se utilizarán en las operaciones CRUD. Por ejemplo,
-
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.
- Los métodos de la clase son estáticos (
-
Método
seleccionar:- Este método ejecuta la consulta
_SELECTpara seleccionar todos los usuarios de la tabla. Utiliza un objetoCursorDelPoolpara ejecutar la consulta y recopilar los resultados en una lista de objetosUsuario, que se devuelven como resultado.
- Este método ejecuta la consulta
-
Método
insertar:- Este método toma un objeto
Usuariocomo 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 objetoCursorDelPool. El método devuelve el número de filas afectadas.
- Este método toma un objeto
-
Método
actualizar:- Este método toma un objeto
Usuariocomo 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 objetoCursorDelPool. El método devuelve el número de filas afectadas.
- Este método toma un objeto
-
Método
eliminar:- Este método toma un objeto
Usuariocomo argumento y lo elimina de la base de datos utilizando la consulta_ELIMINAR. El método se ejecuta utilizando un objetoCursorDelPooly devuelve el número de filas afectadas.
- Este método toma un objeto
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.
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!')
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:
-
Importaciones:
- Se importa la clase
UsuarioDAOque proporciona métodos para interactuar con la base de datos. - También se importa un módulo llamado
logque se asume que proporciona funciones de registro. - Se importa la clase
Usuarioque se utiliza para crear objetos de usuario.
- Se importa la clase
-
Bucle While:
- Se utiliza un bucle
whileque se ejecuta hasta que la variableopcionsea igual a 5. Esta variable se utiliza para controlar el flujo del programa y salir cuando el usuario elige la opción 5 (Salir).
- Se utiliza un bucle
-
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.
- El programa muestra un menú de opciones en la consola, que incluye las siguientes opciones:
-
Manejo de Opciones:
- El programa utiliza una serie de estructuras
ifyelifpara manejar la opción seleccionada por el usuario.
- El programa utiliza una serie de estructuras
-
Opción 1 - Listar Usuarios:
- Si el usuario selecciona la opción 1, se llama al método
seleccionardeUsuarioDAOpara recuperar todos los usuarios de la base de datos y se muestra cada usuario en la consola utilizando el objetolog.
- Si el usuario selecciona la opción 1, se llama al método
-
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
Usuariocon estos valores y se llama al métodoinsertardeUsuarioDAOpara agregar el usuario a la base de datos.
- 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
-
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
Usuariocon estos valores y se llama al métodoactualizardeUsuarioDAOpara actualizar el usuario en la base de datos.
- 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
-
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
Usuariocon este ID y se llama al métodoeliminardeUsuarioDAOpara eliminar el usuario de la base de datos.
- 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
-
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