Sistema web completo de reservas de turnos para gimnasios de múltiples disciplinas. Desarrollado con Flask, MySQL y Bootstrap 5.
- Características
- Tecnologias Utilizadas
- Requisitos Previos
- Instalación
- Configuracion
- Uso
- Estructura del Proyecto
- API Endpoints
- Changelog
- Seguridad
- Licencia
- Autor
- Contacto y Soporte
- 🌐 Reservas Online 24/7 - Reserva desde cualquier dispositivo
- 📅 Calendario Semanal Interactivo - Visualización clara de disponibilidad
- ⚡ Verificación en Tiempo Real - Ve cupos disponibles al instante
- 📱 100% Responsive - Diseñado para móviles, tablets y desktop
- 📄 Carga de Comprobantes - Sube tu comprobante de pago (opcional)
- 🔒 Validación de DNI - Prevención de reservas duplicadas
- 🚫 Prevención de Horarios Pasados - Solo reserva horarios futuros
- 🎛️ Panel de Control Completo - Dashboard con estadísticas
- 📊 Gestión de Reservas - Ver, buscar, eliminar y agregar reservas
- 🏋️ ABM de Disciplinas - Agregar, editar, activar/desactivar
- ⏰ Gestión de Horarios - Configurar días, horas y cupos por clase
- 👁️ Visualización de Comprobantes - Revisar pagos de clientes
- 🔍 Búsqueda Avanzada - Encuentra reservas por nombre o DNI
- 📈 Estadísticas en Tiempo Real - Total de reservas y disciplinas activas
- Python 3.8+ - Lenguaje de programación
- Flask 3.0.0 - Framework web
- Flask-MySQLdb - Conexión MySQL
- PyMySQL - Driver MySQL alternativo
- Werkzeug - Seguridad y utilidades
- Gunicorn - Servidor WSGI para producción
- Bootstrap 5 - Framework CSS responsive
- Bootstrap Icons - Iconografía
- JavaScript Vanilla - Interactividad
- Jinja2 - Motor de templates
- MySQL 5.7+ - Base de datos relacional
- MariaDB - Compatible
Antes de instalar, asegurate de tener:
-
Python 3.8 o superior
python --version
-
MySQL 5.7+ o MariaDB
mysql --version
-
pip (gestor de paquetes de Python)
pip --version
-
Git (opcional, para clonar el repositorio)
git --version
git clone https://github.com/LeandroManna/gimnasio-reservas.git
cd gimnasio-reservas# Windows
python -m venv venv
venv\Scripts\activate
# Linux/Mac
python3 -m venv venv
source venv/bin/activatepip install -r requirements.txtCrear base de datos:
mysql -u root -pCREATE DATABASE gimnasio_reservas CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
exit;Importar estructura y datos de ejemplo:
mysql -u root -p gimnasio_reservas < database.sqlEditá el archivo app.py y configurá tu conexión MySQL (líneas 26-28):
app.config['MYSQL_HOST'] = 'localhost'
app.config['MYSQL_USER'] = 'root' # Tu usuario MySQL
app.config['MYSQL_PASSWORD'] = '' # Tu contraseña MySQL
app.config['MYSQL_DB'] = 'gimnasio_reservas'python app.pyLa aplicación estará disponible en: http://localhost:5000
Credenciales por defecto:
- Usuario:
admin - Contraseña:
admin123
Generar nuevo hash de contraseña:
python generate_password.pySeguí las instrucciones para crear un usuario administrador seguro.
Los comprobantes de pago se guardan en:
static/uploads/comprobantes/
Límite de tamaño: 5MB por archivo
Formatos permitidos: JPG, PNG, PDF
- Abrí http://localhost:5000
- Seleccioná una disciplina
- Elegí día y horario en el calendario
- Completá tus datos (Nombre, Apellido, DNI)
- Opcionalmente subí tu comprobante de pago
- Confirmá la reserva
- Guardá tu número de confirmación
- Accedé a http://localhost:5000/admin/login
- Ingresá usuario y contraseña
- Desde el dashboard podés:
- Ver todas las reservas
- Gestionar disciplinas
- Configurar horarios
- Ver estadísticas
gimnasio-reservas/
│
├── app.py # Aplicación principal Flask
├── database.sql # Esquema y datos de ejemplo
├── requirements.txt # Dependencias Python
├── generate_password.py # Generador de hash de contraseña
├── README.md # Este archivo
├── .gitignore # Archivos ignorados por Git
│
├── static/
│ └── uploads/
│ └── comprobantes/ # Archivos subidos por clientes
│
└── templates/
├── base.html # Template base
├── index.html # Selección de disciplinas
├── reservar.html # Sistema de calendario y reservas
└── admin/
├── login.html # Login administrador
├── dashboard.html # Panel principal
├── disciplinas.html # Gestión de disciplinas
├── horarios.html # Gestión de horarios
└── reservas.html # Gestión de reservas
| Método | Endpoint | Descripción |
|---|---|---|
| GET | / |
Página principal - Listado de disciplinas |
| GET | /reservar/<int:disciplina_id> |
Vista de calendario para reservar |
| GET | /check_disponibilidad/<int:horario_id>/<fecha> |
API para verificar cupos |
| POST | /confirmar_reserva |
Procesar y confirmar una reserva |
| Método | Endpoint | Descripción |
|---|---|---|
| GET/POST | /admin/login |
Login del administrador |
| GET | /admin/logout |
Cerrar sesión |
| GET | /admin/dashboard |
Panel principal con estadísticas |
| GET | /admin/reservas |
Listado de todas las reservas |
| GET | /admin/reservas/eliminar/<int:id> |
Eliminar una reserva |
| GET | /admin/disciplinas |
Gestión de disciplinas |
| POST | /admin/disciplinas/agregar |
Agregar nueva disciplina |
| GET | /admin/disciplinas/toggle/<int:id> |
Activar/Desactivar disciplina |
| GET | /admin/disciplinas/eliminar/<int:id> |
Eliminar disciplina |
| GET | /admin/horarios/<int:disciplina_id> |
Gestión de horarios |
| POST | /admin/horarios/agregar/<int:disciplina_id> |
Agregar nuevo horario |
| GET | /admin/horarios/eliminar/<int:horario_id>/<int:disciplina_id> |
Eliminar horario |
Resumen rápido:
# 1. Instalar dependencias del servidor
apt update && apt upgrade -y
apt install python3-pip python3-venv nginx mysql-server -y
# 2. Clonar proyecto
cd /var/www
git clone https://github.com/LeandroManna/gimnasio-reservas.git
# 3. Configurar entorno
cd gimnasio-reservas
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
pip install gunicorn
# 4. Configurar MySQL e importar database.sqlCreá un archivo .env (NO lo subas a Git):
SECRET_KEY=tu_clave_super_secreta_de_produccion
MYSQL_HOST=localhost
MYSQL_USER=gimnasio_user
MYSQL_PASSWORD=password_segura
MYSQL_DB=gimnasio_reservas- ✨ Release inicial
- ✅ Sistema completo de reservas
- ✅ Panel de administración
- ✅ Control de cupos automático
- ✅ Prevención de horarios pasados
- ✅ Diseño responsive
- ✅ Carga de comprobantes
- ✅ Contraseñas hasheadas con Werkzeug (scrypt)
- ✅ Sesiones seguras con Flask
- ✅ Validación de inputs (frontend y backend)
- ✅ Prevención de SQL Injection con queries parametrizadas
- ✅ Sanitización de nombres de archivo
- ✅ Límite de tamaño de uploads (5MB)
- ✅ Validación de tipos de archivo
Este proyecto está bajo la Licencia MIT. Ver archivo LICENSE para más detalles.
Leandro Manna
- 📍 San Salvador de Jujuy, Argentina
- 💼 Programador & Técnico en Informática
- 🌐 Especializado en desarrollo web y automatización
- 💼 LinkedIn: Leandro Manna
- 🐙 GitHub: @LeandroManna
- 📱 WhatsApp: +54 3884695353
- Flask - Framework web
- Bootstrap - Framework CSS
- Bootstrap Icons - Iconografía
- Comunidad de desarrolladores de Python
⭐ Si te gustó este proyecto, dale una estrella en GitHub ⭐
Hecho con ❤️ por Leandro Manna