Una aplicación web para reservar y gestionar espacios públicos de forma sencilla y eficiente.
Pueblista es una aplicación web diseñada específicamente para facilitar la gestión y reserva de espacios públicos en Villanueva de las Cruces. Gracias a esta herramienta, los habitantes empadronados en el municipio pueden consultar la disponibilidad de espacios, realizar reservas de forma autónoma y recibir confirmaciones automáticas.
La aplicación busca, por un lado, mejorar la organización y la accesibilidad a los espacios municipales para los habitantes del pueblo, y por otro lado, mejorar la eficiencia y agilizar la gestión de los recursos municipales, eliminando los métodos rudimentarios utilizados anteriormente, como tablones físicos y reservas telefónicas.
Este proyceto está desplegado de forma totalmete funcional el Render, y puedes acceder al él directamente desde este link: http://pueblista-pgpi.onrender.com
A nivel organizacional, para este proyecto hemos seguido las guías de planificaición enunciadas por el PMBOK. Nuestro proyecto fue desarrollado a lo largo de dos meses divididos en cuatro fases: inicio, planificación, ejecución y cierre. Los documentos de planificación referentes a este desarrollo se podrán encontrar en la carpeta ```/docs´´´ en la raíz de este proyecto. El desarrollo se ha llevado a cabo haciendo uso de la metodología ágil Sprint, siguiendo un ciclo de vida iterativo en cada Sprint.
A nivel técnico, este proyecto se ha realizado usando como base el framework de Django, haciendo uso de la arquitecura model-view-template. Los lenguages usandos han sido Python, HTML, CSS y JavaScript principalmente. Para las pruebas, se ha usado la librería Pytest para testear los módulos del proyecto. Más adelante, se detallan más en profundidad todos estos aspectos para poder probar tú mismo este proyecto.
└── pueblista-pgpi.git/
├── docs/
│ ├── ...
├── plantilla-markdown/
│ ├── ...
├── pueblista/
│ ├── gestion_contactos/...
│ ├── gestion_espacios/...
│ ├── gestion_notificaciones/...
│ ├── gestion_reservas/...
│ ├── gestion_sms/...
│ ├── gestion_usuarios/...
│ ├── home/...
│ ├── listado_reservas/...
│ ├── pueblista/...
│ ├── static/...
│ ├── manage.py
│ ├── locustfile.py
│ └── templates/...
├── templates/
├── requirements.txt
├── README.md
pueblista
locustfile.py - Locustfile.py define una prueba de carga para el sitio web
- Simula el comportamiento del usuario, específicamente cargando la página de inicio, para evaluar el rendimiento del sitio web bajo estrés
- El script utiliza el framework Locust para generar usuarios virtuales con tiempos de espera variables, proporcionando métricas de rendimiento para el análisis de escalabilidad y estabilidad
- Esto contribuye al proceso general de aseguramiento de la calidad del proyecto.manage.py - `manage.py` sirve como la interfaz principal de línea de comandos para el proyecto Pueblista basado en Django
- Proporciona el punto de entrada para ejecutar varias tareas administrativas, como ejecutar el servidor de desarrollo, migrar bases de datos y gestionar aplicaciones de Django
- Esencialmente, actúa como el punto de control central para interactuar con la infraestructura backend del proyecto.home
Este módulo contiene las plantillas de la página principal de la aplicación, además de las urls necearias para acceder a la navegación del resto del proyecto.
models.py ❯ ...
apps.py ❯ ...
admin.py ❯ ...
tests.py ❯ Pruebas unitarias en Pytest para el módulo.
urls.py ❯ ...
views.py ❯ ...
templates
home.html ❯ Esta es la plantilla que contiene la pantalla de frontend de la página principal.
editar_ayuntamiento.html ❯ Esta es la plantilla que contienen el formulario de edición del carusel de información del ayuntamiento.
gestion_notificaciones
Este módulo Permite a los administradores gestionar e interactuar con las notificaciones dentro del sistema de gestión de notificaciones de la aplicación `pueblista`
Esto simplifica la administración al proporcionar información de forma rápida a los usuarios de la aplicación.
models.py ❯ Modelo de datos del objeto `Notificación.`
apps.py ❯ ...
admin.py El archivo `admin.py` integra el modelo `Notificacion` en la interfaz de administración de Django tests.py ❯ Pruebas unitarias en Pytest para el módulo.
urls.py ❯ Direcciones para acceder a las notificaciones, marcarlas como leídas o cancelarlas.
views.py ❯ ...
templates
notificaciones.html ❯ Pantalla de visualización y gestión de las notificaciones.
gestion_espacios
models.py ❯ Se definen el modelo de EspacioPublico
apps.py ❯ ...
forms.py ❯ Formuñario de creacion y edición de un espacio y la actualización del estado de una reserva.
admin.py ❯ El archivo `admin.py` integra el modelo `EspacioPublico` en la interfaz de administración de Django
tests.py ❯ Pruebas unitarias en Pytest para el módulo.
urls.py ❯ Direcciones para listar, crear, editar y elimiar espacios, y para mostrar las reservas de un espacio específico.
views.py ❯ Vistas para la edición, listado, creación de espacios y vista de las reserva de cada espacio por separado.
templates
list.html ❯ Pantalla con el listado de todos lo espacios, para los administradores y para los usuaios por separado.
reservas.html ❯ Pantalla que permite a los administradores ver y gestionar el estado de las reserva de cada espacio.
create.html ❯ Pantalla de creación de un espacio.
edit.html ❯ Pantalla de edición de un espacio.
delete.html ❯ ...
pueblista
asgi.py ❯ Archivo de configuración para la interfaz de servidor de aplicaciones asíncronas (ASGI) de Django.
settings.py ❯ Archivo de configuración principal de Django, contiene todas las configuraciones globales del proyecto.
urls.py ❯ Archivo de configuración de las rutas URL del proyecto a nivel general, define cómo se mapean las URLs a las vistas.
wsgi.py ❯ Archivo de configuración para la interfaz de servidor de aplicaciones web (WSGI) de Django.
gestion_reservas
models.py ❯ Se definen los modelos de datos para los objetos `Reserva`y `SolicitudReservaEspecial`.
apps.py ❯ ...
forms.py ❯ Formularios para la pertición de reservas especiales.
admin.py ❯ El archivo `admin.py` integra el modelo `Reserva` en la interfaz de administración de Django.
tests.py ❯ Pruebas unitarias en Pytest para el módulo.
urls.py ❯ Direcciones para crear, cancelar, aceptar, ver solicitudes por espacio, ver solicitudes pendientes y ver todas las solicitudes de cada usuario.
views.py ❯ ...
templates
solicitud_reserva_especial.html ❯ Vista del formulario de solicitud de una reservas especial.
calendario_reservas.html ❯ Vista del calendario de reservas de una reserva. En esta pantalla el usuario puede seleccionar las horas en las que realizar una reserva de un espacio, además de cancelarlas si lo deseara.
solicitudes_pendientes.html ❯ Pantalla en la que los administradores podrán consultar las solicitudes pendientes.
mis_solicitudes.html ❯ Pantalla en la que un usuario podrá ver un historial de sus solicitudes.
gestion_usuarios
models.py ❯ Se definen los modelos de datos para los objetos `CustomUser` y `CustomUserManager`.
apps.py ❯ ...
forms.py ❯ Formularios para inicio de sesión de usuarios.
backends.py ❯ Backend de autenticación personalizado para el modelo `CustomUser`.
admin.py ❯ El archivo `admin.py` integra el modelo `CustomUser` en la interfaz de administración de Django.
tests.py ❯ Pruebas unitarias en Pytest para el módulo.
urls.py ❯ Direcciones para el registro, inicio de sesión, perfil de usuario y listado de usuarios.
views.py ❯ Vistas para el registro, inicio de sesión, perfil de usuario y listado de usuarios.
decorators.py ❯ Decoradores personalizados para la gestión de permisos y autenticación.
templates
login.html ❯ Plantilla para la pantalla de inicio de sesión.
perfil.html ❯ Plantilla para la pantalla de perfil de usuario.
user_list.html ❯ Plantilla para la pantalla de listado de usuarios (solo para administradores).
listado_reservas
models.py ❯ ...
apps.py ❯ ...
admin.py ❯ Integración del modelo `ListadoReservas` en la interfaz de administración de Django.
tests.py ❯ Pruebas unitarias en Pytest para el módulo.
urls.py ❯ Direcciones para acceder al listado de reservas de un usuario y cancelar reservas.
views.py ❯ Vistas para mostrar y gestionar el listado de reservas de un usuario.
templates
listado_reservas.html ❯ Pantalla que incluye el listado de las reservas de un usuario y permite su cancelación.
Antes de comenzar con pueblista-pgpi.git, asegúrate de que tu entorno de ejecución cumpla con los siguientes requisitos:
- Lenguaje de programación: Python 3.12 o superior
- Gestor de paquetes: Pip / Pip3 o superior
Instala pueblista-pgpi.git usando uno de los siguientes métodos:
Construir desde el código fuente:
- Clona el repositorio pueblista-pgpi.git:
❯ git clone https://github.com/Pueblista-PGPI/pueblista-pgpi.git
- Navega al directorio del proyecto:
❯ cd pueblista-pgpi.git
- Crear un entorno virtual en el directorio raíz del proyecto:
❯ python -m venv env
- Activa el entorno virtual:
En Windows:
❯ .\env\Scripts\activate
En macOS y Linux:
❯ source env/bin/activate
- Instala las dependencias del proyecto:
❯ pip install -r requirements.txt
Nota: En caso de usar MacOS, se tendrá que usar pip3
en lugar que pip a la hora de instalar el archivo requirements.
-
Sustituye el archivo
env.example
completando con los tus datos y cambia el nombre a.env
. -
Instala PostgresSQL:
En Windows:
❯ choco install postgresql
En macOS:
❯ brew install postgresql
En Linux:
❯ sudo apt-get install postgresql postgresql-contrib
- Inicia el servicio de PostgreSQL:
En Windows:
❯ net start postgresql
En macOS:
❯ brew services start postgresql
En Linux:
❯ sudo service postgresql start
- Crea una base de datos y un usuario para el proyecto:
❯ sudo -u postgres psql
postgres=# CREATE DATABASE pueblista;
postgres=# CREATE USER pueblista_user WITH ENCRYPTED PASSWORD 'tu_contraseña';
postgres=# GRANT ALL PRIVILEGES ON DATABASE pueblista TO pueblista_user;
postgres=# \q
- Configura las variables de entorno en el archivo
.env
con los datos de la base de datos:
DATABASE_NAME=pueblista
DATABASE_USER=pueblista_user
DATABASE_PASSWORD=tu_contraseña
DATABASE_HOST=localhost
DATABASE_PORT=5432
Ejecuta pueblista-pgpi.git siguiendo estos:
Usando pip
- Muévete al directorio pueblista
❯ cd pueblista
- Crea las migraciones
❯ python manage.py makemigrations
❯ python manage.py migrate
- Ejecuta el proyecto
❯ python manage.py runserver
- Tras esto, solo hay que meter la siguiente url en el navegador, y así tendríamos desplegado el proyecto de forma local: http://localhost:5000
Ejecuta la suite de pruebas usando el siguiente comando (Nota: para esto se deben haber seguido antes las instrucciones de uso, principalemtne, instalando el archivo requirements.txt):
Usando pip
❯ pytest
Para comprobar la cobertura de código (coverage) de la siute de pruebas, ejecuta el siguiente comando:
❯ coverage run --source=<tu_modulo> manage.py test <tu_modulo>
donde tu_modulo
es el nombre del módulo a testear entre los siguientes: gestion_espacios
, gestion_notificaciones
, gestion_reservas
, gestion_usuarios
, home
y listado_reservas
.
Ejecutar coverage report -m
para ver el reporte de cobertura en la terminal.
Ejecutar coverage html
para generar el reporte de cobertura en un archivo HTML htmlcov/index.html
Este proyecto está protegido bajo la licencia básica MIT. Para más detalles, consulte el archivo LICENSE.
A continuación se listan los autores del proyecto en orden alfabético:
José Miguel Iborra |
Ramón Gavira |
Daniel Fernández |
Antonio Macías |
Rafael Pulido |