PROYECTO
FINAL
PYTHON
Andrea Pardo Gispert
PYTHON
PROYECTO FINAL. PROPUESTA A
Andrea Pardo Gispert
ANDREA PARDO GISPERT
RESPONSABLE DEL DESARROLLO DE LA APLICACIÓN
Fecha: 01/MAYO/2024
PYTHON
PROYECTO FINAL. PROPUESTA A
Andrea Pardo Gispert
ÍNDICE DE CONTENIDOS
1. Descripción general del proyecto
2. Objetivos y alcance del proyecto
3. Stack tecnológico y alternativas evaluadas
4. Modelo de datos: Explicación de la base de datos y esquema
5. Explicación de los requisitos de la aplicación
6. Manual de instalación
7. Conclusiones
8. Evolutivos del proyecto (cosas a mejorar o a realizar en futuros
desarrollos)
PYTHON
PROYECTO FINAL. PROPUESTA A
Andrea Pardo Gispert
DESCRIPCIÓN GENERAL DEL PROYECTO
Este proyecto es una aplicación web desarrollada con Flask, un framework de
Python para construir aplicaciones web. Esta aplicación web tiene como
objetivo proporcionar un sistema integral de gestión de ventas y compras
para una tienda retro de tecnología.
Con una interfaz de usuario intuitiva y funcionalidades robustas, la aplicación
ofrece una solución sencilla para administrar el negocio de una manera
eficiente y efectiva.
La aplicación permite el registro y acceso a tres tipos de usuarios:
1. Administrador - Quien tiene acceso a la información sobre proveedores,
clientes, productos y sus ventas.
2. Proveedor - Quien registra su empresa en la aplicación y sus productos
para venderlos.
3. Cliente - Aquel que compra los productos disponibles en la aplicacn.
La aplicación está estructurada en varios módulos, cada uno con un propósito
específico:
Base de Datos:
Utilizando SQLAlchemy, la aplicación interactúa con una base de datos SQLite
para almacenar y gestionar información relacionada con usuarios,
proveedores, clientes, productos y compras. Los modelos de datos están
definidos de manera clara y concisa, siguiendo prácticas de diseño de bases de
datos relacionales.
PYTHON
PROYECTO FINAL. PROPUESTA A
Andrea Pardo Gispert
Controladores:
Los controladores manejan las solicitudes HTTP y coordinan la lógica de
negocio de la aplicación. Estas funciones se encargan de procesar las
peticiones del usuario, realizar operaciones en la base de datos y generar
respuestas adecuadas. Cada controlador está asociado a una ruta específica
de la aplicación y sigue un enfoque de diseño orientado a objetos para
mantener el código modular y reutilizable.
Plantillas HTML:
La aplicación utiliza el motor de plantillas Jinja2 para generar contenido
dinámico en las vistas HTML. Las plantillas están diseñadas de manera
cuidadosa para proporcionar una experiencia de usuario fluida y atractiva. Se
aplican principios de diseño web responsivo para garantizar que la aplicación
sea accesible desde una variedad de dispositivos y tamaños de pantalla.
Estilos CSS:
Los estilos CSS definen la apariencia visual de la aplicación, incluyendo
colores, tipografías, márgenes y espaciados. Se sigue una metodología de
diseño basada en componentes para mantener la coherencia y la consistencia
en toda la interfaz de usuario. Además, se utilizan técnicas avanzadas de CSS,
como flexbox y grid, para crear diseños flexibles y adaptables.
PYTHON
PROYECTO FINAL. PROPUESTA A
Andrea Pardo Gispert
OBJETIVOS Y ALCANCEL DEL PROYECTO
Automatizar el proceso de gestión de ventas y compras en una tienda retro de
tecnología para mejorar la eficiencia operativa.
Proporcionar una plataforma centralizada para registrar y realizar un
seguimiento detallado de todas las transacciones de ventas y compras.
Facilitar la administración de usuarios, proveedores, clientes y productos,
permitiendo un acceso fácil y seguro a la información relevante.
Mejorar la experiencia del cliente al garantizar la disponibilidad de productos,
la precisión en los registros de ventas y la gestión eficaz de las relaciones con
los clientes.
Generar informes y análisis periódicos sobre el rendimiento del negocio,
incluyendo métricas como ventas totales, productos más populares y
tendencias de compra.
En cuanto al alcance del proyecto tenemos:
- Inclusión:
Registro y gestión de usuarios con diferentes roles, como administradores,
proveedores y clientes.
Registro y gestión de proveedores, incluyendo información de contacto y
detalles de los productos suministrados.
Registro y gestión de clientes, con información personal y detalles de
contacto.
Registro y gestión de productos, con atributos como nombre, descripción,
precio, stock y proveedor asociado.
Registro de compras realizadas por los clientes, incluyendo detalles del
producto comprado, cantidad y cliente.
PYTHON
PROYECTO FINAL. PROPUESTA A
Andrea Pardo Gispert
Generación de informes y análisis sobre el rendimiento del negocio, utilizando
datos recopilados de las transacciones de ventas y compras.
- Exclusión:
Funcionalidades avanzadas de análisis predictivo o inteligencia artificial.
Integraciones complejas con sistemas externos de contabilidad o gestión de
inventarios.
Características adicionales no relacionadas directamente con la gestión de
ventas y compras en una tienda retro de tecnología, como redes sociales o
funciones de marketing.
Establecer estos objetivos claros y definir el alcance de este proyecto ayuda a
garantizar que se cumplan las expectativas y se eviten desviaciones
importantes durante el desarrollo y la implementación.
PYTHON
PROYECTO FINAL. PROPUESTA A
Andrea Pardo Gispert
STACK TECNOLÓGICO Y ALTERNATIVAS
EVALUADAS
Stack Tecnológico:
Python: Se utiliza como lenguaje de programación principal debido a su
versatilidad, legibilidad y amplio soporte de librerías para desarrollo web,
manipulación de datos y análisis.
Flask: Framework de Python para el desarrollo de aplicaciones web. Se
seleccionó por su simplicidad y flexibilidad, lo que permite construir
rápidamente una aplicación web escalable y fácil de mantener.
SQLAlchemy: Biblioteca de Python para la interacción con bases de datos SQL.
Facilita la abstracción de la base de datos y la manipulación de objetos, lo que
simplifica el manejo de datos en la aplicación.
SQLite: Sistema de gestión de bases de datos relacional ligero y fácil de
configurar. Ideal para aplicaciones pequeñas o medianas con bajo volumen de
datos, proporcionando un almacenamiento eficiente y rápido.
HTML/CSS: Utilizados para la estructura y el diseño de la interfaz de usuario
web. HTML define la estructura de las páginas web, mientras que CSS se
encarga del diseño y la presentación visual.
Jinja2: Motor de plantillas para Python que se integra con Flask para generar
contenido dinámico en las páginas web. Permite la reutilización de código y la
creación de vistas más dinámicas y personalizables.
Matplotlib y Seaborn: Utilizados para la generación de gráficos y
visualizaciones de datos. Matplotlib ofrece una amplia variedad de gráficos
personalizables, mientras que Seaborn proporciona estilos y funciones
adicionales para mejorar la estética de los gráficos.
PYTHON
PROYECTO FINAL. PROPUESTA A
Andrea Pardo Gispert
Alternativas Evaluadas:
Django vs. Flask: Se consideró Django como alternativa a Flask debido a su
robustez y su amplio conjunto de características integradas. Sin embargo,
Flask fue elegido por su simplicidad y menor curva de aprendizaje, lo que lo
hace más adecuado para proyectos más pequeños y ágiles.
MySQL vs. SQLite: Se evaluaron ambas opciones para la base de datos, pero se
optó por SQLite debido a su facilidad de configuración y uso, así como su
capacidad para manejar el volumen de datos esperado para el proyecto.
MySQL podría ser considerado en el futuro si el proyecto escala y requiere
capacidades más avanzadas de gestión de bases de datos.
Plotly vs. Matplotlib/Seaborn: Plotly fue considerado como una alternativa a
Matplotlib y Seaborn debido a su capacidad para generar gráficos interactivos.
Sin embargo, se optó por Matplotlib y Seaborn debido a su mayor flexibilidad
y control sobre la estética de los gráficos, así como su integración bien
establecida con el ecosistema de Python.
PYTHON
PROYECTO FINAL. PROPUESTA A
Andrea Pardo Gispert
MODELO DE DATOS
Explicación de la Base de Datos:
Se utilizará una base de datos relacional SQLite para el proyecto. SQLite fue
elegido debido a su facilidad de implementación y su capacidad para manejar
el volumen de datos esperado para la aplicación. Además, al ser una base de
datos ligera y autocontenida, no requiere un servidor separado, lo que
simplifica la configuración y el despliegue.
Esquema de la Base de Datos:
El esquema de la base de datos incluirá las siguientes tablas principales:
usuarios: Almacena la información de los usuarios registrados en el sistema,
como su dirección de correo electrónico, contraseña, tipo de usuario y si
tienen acceso a ciertos datos sensibles.
proveedores: Contiene los detalles de los proveedores de productos, como el
nombre de la empresa, información de contacto, ubicación y detalles
relacionados con la facturación, como el IVA.
clientes: Guarda la información de los clientes que realizan compras en la
plataforma, incluyendo su nombre, apellido, dirección de correo electrónico,
información de contacto y ubicación.
administrador: Almacena los datos de los administradores del sistema,
quienes tienen privilegios especiales para visualizar usuarios, productos y
otras configuraciones.
PYTHON
PROYECTO FINAL. PROPUESTA A
Andrea Pardo Gispert
productos: Contiene la información de los productos disponibles en la
plataforma, como su nombre, descripción, stock, precio, proveedor asociado y
categoría.
compras: Registra las compras realizadas por los clientes, incluyendo los
detalles del producto comprado, la cantidad adquirida y la información del
comprador.
Este esquema proporcionará una estructura organizada y eficiente para
almacenar y gestionar los datos relacionados con los usuarios, proveedores,
clientes, productos y transacciones de compra en la aplicación. El diseño de la
base de datos se centrará en mantener la integridad de los datos y facilitar la
recuperación de información de manera rápida y eficiente.
PYTHON
PROYECTO FINAL. PROPUESTA A
Andrea Pardo Gispert
REQUISITOS DE LA APLICACIÓN
Funcionalidades Principales:
La aplicación ofrece una amplia gama de funcionalidades para satisfacer las
necesidades de gestión de ventas y compras de la tienda retro de tecnología:
Gestión de Usuarios:
Los usuarios pueden registrarse e iniciar sesión en la aplicación con diferentes
roles, como administradores, proveedores y clientes. Cada usuario tiene
acceso a funcionalidades específicas según su rol, lo que garantiza la
seguridad y la privacidad de la información.
PYTHON
PROYECTO FINAL. PROPUESTA A
Andrea Pardo Gispert
Inicio de Sesión: Los usuarios registrados deben poder iniciar sesión en la
aplicación utilizando sus credenciales. El apartado Destacados permite ver lo
que se va a encontrar en la app web y habilita un botón que redirige al
registro de usuarios.
PYTHON
PROYECTO FINAL. PROPUESTA A
Andrea Pardo Gispert
PYTHON
PROYECTO FINAL. PROPUESTA A
Andrea Pardo Gispert
Gestión de Proveedores:
Permite a los usuarios agregar, editar y eliminar información sobre
proveedores de productos retro de tecnología. Se pueden especificar detalles
como el nombre de la empresa, la dirección de contacto, el número de
teléfono y el correo electrónico.
Gestión de Clientes:
Los usuarios pueden registrar y administrar información sobre los clientes que
realizan compras en la tienda. Esto incluye datos personales como nombre,
apellido, dirección y detalles de contacto.
PYTHON
PROYECTO FINAL. PROPUESTA A
Andrea Pardo Gispert
Gestión de Productos:
Permite agregar, editar y eliminar productos disponibles en la tienda. Cada
producto tiene atributos como nombre, descripción, precio, stock y proveedor
asociado. Se puede realizar un seguimiento detallado del inventario para
garantizar la disponibilidad de los productos en todo momento.
PYTHON
PROYECTO FINAL. PROPUESTA A
Andrea Pardo Gispert
PYTHON
PROYECTO FINAL. PROPUESTA A
Andrea Pardo Gispert
Registro de Compras:
Permite registrar las compras realizadas por los clientes, incluyendo detalles
como el producto comprado, la cantidad y el cliente que realizó la compra.
Esto facilita el seguimiento de las ventas y la generación de informes de
rendimiento.
PYTHON
PROYECTO FINAL. PROPUESTA A
Andrea Pardo Gispert
PYTHON
PROYECTO FINAL. PROPUESTA A
Andrea Pardo Gispert
Generación de Informes: Los administradores deben poder generar informes
sobre las ventas, inventario, etc.
PYTHON
PROYECTO FINAL. PROPUESTA A
Andrea Pardo Gispert
PYTHON
PROYECTO FINAL. PROPUESTA A
Andrea Pardo Gispert
PYTHON
PROYECTO FINAL. PROPUESTA A
Andrea Pardo Gispert
Requisitos No Funcionales:
Rendimiento: La aplicación debe ser capaz de manejar un número significativo
de usuarios y transacciones simultáneas sin experimentar una degradación del
rendimiento.
Seguridad: La aplicación debe proteger los datos sensibles de los usuarios,
como contraseñas y datos de pago.
Usabilidad: La interfaz de usuario debe ser intuitiva y fácil de usar para que los
usuarios puedan navegar por la aplicación sin dificultad.
Disponibilidad: La aplicación debe estar disponible para su uso durante la
mayor parte del tiempo, con un tiempo de inactividad mínimo planificado
para el mantenimiento.
Escalabilidad: La arquitectura de la aplicación debe ser escalable para que
pueda crecer fácilmente a medida que aumenta la demanda de usuarios.
Compatibilidad: La aplicación debe ser compatible con una amplia gama de
dispositivos y navegadores web para garantizar una experiencia uniforme
para todos los usuarios.
PYTHON
PROYECTO FINAL. PROPUESTA A
Andrea Pardo Gispert
MANUAL DE INSTALACIÓN
Manual de Instalación
Este manual proporciona instrucciones detalladas sobre cómo instalar y
configurar el proyecto desde cero.
Requisitos Previos
Antes de comenzar la instalación, asegúrate de tener instalados los siguientes
componentes:
Python: Asegúrate de tener Python instalado en tu sistema. Puedes
descargarlo desde python.org.
Gestor de Paquetes Pip: Python debería venir con pip instalado
automáticamente. Puedes verificarlo ejecutando pip --version en tu terminal.
SQLite: Este proyecto utiliza SQLite como base de datos, que generalmente
está incluido en las instalaciones estándar de Python.
Pasos de Instalación
Sigue estos pasos para instalar y configurar el proyecto:
Descargar el Archivo ZIP con el proyecto.
Guarda el archivo ZIP en la ubicación de tu elección en tu sistema local.
Navega hasta la ubicación donde guardaste el archivo ZIP descargado.
Haz clic derecho en el archivo ZIP y selecciona la opción para extraerlo.
PYTHON
PROYECTO FINAL. PROPUESTA A
Andrea Pardo Gispert
Extrae el contenido del archivo ZIP en un directorio de tu elección en tu
sistema local.
Instalar Dependencias:
Navega hasta el directorio del proyecto y ejecuta el siguiente
comando para instalar las dependencias necesarias:
Configurar la Base de Datos:
Por defecto, el proyecto está configurado para utilizar una base de datos
SQLite. No se requiere configuración adicional, ya que SQLite crea
automáticamente el archivo de base de datos.
Ejecutar la Aplicación:
Una vez que hayas configurado todo, puedes ejecutar la aplicación utilizando
el siguiente comando:
Acceder a la Aplicación:
Después de ejecutar el comando anterior, la aplicación estará disponible en tu
navegador web en la dirección http://localhost:5000.
PYTHON
PROYECTO FINAL. PROPUESTA A
Andrea Pardo Gispert
Notas Adicionales
Asegúrate de tener los permisos adecuados para instalar paquetes y crear
archivos en tu sistema.
Sigue estos pasos cuidadosamente y deberías poder instalar y ejecutar el
proyecto en tu entorno local sin problemas. Si encuentras algún problema
durante la instalación, consulta la documentación del proyecto.
Usuarios y Contraseñas usadas:
Administrador:
Usuario: admin@correo.com
Contraseña: 123456Admin
Cliente 0:
Usuario: cliente@correo.com
Contraseña: 123456Cliente
Cliente 1:
Usuario: cliente1@correo.com
Contraseña: 654321Cliente
Cliente 2:
Usuario: cliente2@correo.com
Contraseña: 987654Cliente
PYTHON
PROYECTO FINAL. PROPUESTA A
Andrea Pardo Gispert
Proveedor 0:
Usuario: proveedor@correo.com
Contraseña: 123456Proveedor
Proveedor 1:
Usuario: proveedor1@correo.com
Contraseña: 654321Proveedor
Proveedor 2:
Usuario: proveedor2@correo.com
Contraseña: 987654Proveedor
PYTHON
PROYECTO FINAL. PROPUESTA A
Andrea Pardo Gispert
CONCLUSIONES
Con este proyecto se ha logrado desarrollar una aplicación web robusta que
cumple con los objetivos establecidos. Se han implementado funcionalidades
clave, como la gestión de usuarios, proveedores, clientes, productos y
compras, lo que proporciona una plataforma completa para administrar un
negocio de manera eficiente.
Cumplimiento de objetivos:
En general, los objetivos del proyecto se han cumplido de manera
satisfactoria. Se han creado interfaces para interactuar con la base de datos y
se han implementado las características esenciales requeridas para una
gestión efectiva de los datos y procesos comerciales.
Lecciones aprendidas y desafíos enfrentados:
Durante el desarrollo del proyecto, has adquirido una amplia gama de
conocimientos y habilidades en el uso de tecnologías como Flask, SQLAlchemy
y Matplotlib para el desarrollo web y la visualización de datos. Sin embargo,
también se han enfrentado desafíos, como la configuración inicial del entorno
de desarrollo y la gestión de las relaciones entre las tablas de la base de datos.
Aspectos destacados:
Un aspecto destacado de este proyecto es la integración de diferentes
tecnologías para construir una aplicación completa y funcional. La capacidad
de generar gráficos dinámicos para visualizar datos de compras es otro punto
destacado que agrega valor a la aplicación.
PYTHON
PROYECTO FINAL. PROPUESTA A
Andrea Pardo Gispert
Satisfacción personal:
Personalmente, me siento satisfecha con el resultado de mi proyecto y con el
aprendizaje adquirido durante el proceso. He notado una evolución respecto
a cuando inicie el proyecto.
Al ser un proyecto algo más abierto y poder buscar información para crearlo
desde cero, me he encontrado con que había muchas maneras de hacer una
misma cosa y eso ha generado muchas dudas y ha complicado el trabajo.
Aunque, una vez superada esa fase, he podido acabar el proyecto de forma
satisfactoria.
PYTHON
PROYECTO FINAL. PROPUESTA A
Andrea Pardo Gispert
EVOLUTIVOS DEL PROYECTO
Mejora de la interfaz de usuario: Refinar la interfaz de usuario para hacerla
más intuitiva y atractiva. Esto podría incluir mejoras en el diseño, la
disposición de los elementos y la experiencia general del usuario, incluir un
apartado para que los productos tengan imagen.
Funcionalidad de búsqueda y filtrado: Implementar funciones de búsqueda y
filtrado para permitir a los usuarios encontrar rápidamente la información que
necesitan. Esto podría ser especialmente útil en secciones con grandes
cantidades de datos, como la lista de productos o clientes.
Seguridad: Reforzar la seguridad de la aplicación mediante la implementación
de medidas como la autenticación de usuarios, recuperación de contraseña y
la protección contra ataques comunes, como la inyección SQL y la falsificación
de solicitudes entre sitios (CSRF).
Internacionalización y localización: Permitir que la aplicación sea utilizada por
usuarios de diferentes regiones mediante la implementación de soporte para
múltiples idiomas y formatos de fecha y hora locales.
Otros formatos: Crear una versión que tuviera formato de aplicación de
escritorio o móvil.