Sistema web completo desarrollado en Django para la gestión y reserva de canchas deportivas con sistema de horarios.
- Sistema de autenticación (Login/Registro)
- Visualización de canchas disponibles con imágenes profesionales
- Sistema de reservas por horarios (8:00 AM - 12:00 AM)
- Selección de múltiples horas consecutivas (1-16 horas)
- Detección automática de conflictos de horarios
- Visualización de reservas propias organizadas por estado
- Cancelación de reservas
- Solo visualiza reservas futuras (no historial)
- Interfaz moderna y responsive con Bootstrap 5
- Fondo animado con GIF de fútbol
- Panel de administración completo
- Gestión de canchas y reservas
- Historial de reservas pasadas
- Acción para archivar reservas vencidas
- Visualización de horarios y duración de reservas
- Panel simplificado (sin grupos, sin acciones recientes)
- Sistema de estados: Pendiente, Confirmada, Cancelada, Completada
- Python 3.8 o superior
- Django 5.2.7
- Pillow 11.1.0
- tzdata 2024.2
Windows:
.\venv\Scripts\activatepip install -r requirements.txtpython manage.py makemigrations
python manage.py migratepython manage.py createsuperuserSigue las instrucciones para crear tu cuenta de administrador.
python manage.py runserverEl sistema estará disponible en: http://127.0.0.1:8000/
- Accede al panel de administración: http://127.0.0.1:8000/admin/
- Inicia sesión con tu cuenta de superusuario
- Gestiona canchas:
- Crea nuevas canchas
- Activa/desactiva canchas
- Edita información
- Gestiona reservas:
- Ve todas las reservas activas
- Accede al Historial de Reservas Pasadas (botón en la parte superior)
- Archiva reservas vencidas manualmente
- Gestiona usuarios:
- Crea, edita o elimina usuarios
- Asigna permisos de administrador
- Regístrate en el sistema desde la página principal
- Inicia sesión con tu cuenta
- Explora las canchas disponibles
- Reserva una cancha:
- Selecciona la fecha deseada
- Elige hora de inicio (8:00 AM - 11:00 PM)
- Elige hora de fin (9:00 AM - 12:00 AM)
- El sistema valida conflictos automáticamente
- Visualiza tus reservas en "Mis Reservas":
- Activas: Reservas confirmadas y pendientes
- Completadas: Reservas que ya pasaron
- Canceladas: Reservas que cancelaste
- Cancela reservas si es necesario
- Inicio: 8:00 AM - 11:00 PM
- Fin: 9:00 AM - 12:00 AM (medianoche)
- Duración: 1 a 16 horas consecutivas
- No permite fechas pasadas
- Detecta conflictos de horarios
- Valida que hora fin > hora inicio
- Limita duración máxima
- Solo muestra reservas futuras a usuarios
reserva_canchas/
├── manage.py
├── requirements.txt
├── README.md
├── db.sqlite3 # Base de datos (incluida para desarrollo)
├── config/ # Configuración del proyecto
│ ├── settings.py
│ ├── urls.py
│ └── ...
├── canchas/ # Aplicación principal
│ ├── models.py # Modelos (Cancha, Reserva)
│ ├── views.py # Vistas y lógica de negocio
│ ├── forms.py # Formularios de reserva y registro
│ ├── admin.py # Configuración del panel admin
│ ├── urls.py # URLs de la aplicación
│ ├── management/ # Comandos personalizados
│ │ └── commands/
│ │ └── archivar_reservas.py
│ └── templates/ # Plantillas HTML
│ ├── canchas/
│ │ ├── base.html
│ │ ├── home.html
│ │ ├── login.html
│ │ ├── registro.html
│ │ ├── lista_canchas.html
│ │ ├── reservar.html
│ │ └── mis_reservas.html
│ └── admin/
│ ├── index.html # Personalización del admin
│ └── canchas/
│ └── reserva/
│ ├── change_list.html
│ └── historial.html
└── static/ # Archivos estáticos
└── css/
└── styles.css # Estilos personalizados + GIF de fondo
- nombre: CharField - Nombre de la cancha
- descripcion: TextField - Descripción detallada
- precio_hora: DecimalField - Precio por hora de uso
- imagen: ImageField - Imagen de la cancha (opcional)
- disponible: BooleanField - Estado de disponibilidad
- usuario: ForeignKey(User) - Usuario que realiza la reserva
- cancha: ForeignKey(Cancha) - Cancha reservada
- fecha: DateField - Fecha de la reserva
- hora_inicio: CharField - Hora de inicio (08:00 - 23:00)
- hora_fin: CharField - Hora de fin (09:00 - 00:00)
- fecha_creacion: DateTimeField - Timestamp de creación (solo admin)
- estado: CharField - Estados: pendiente, confirmada, completada, cancelada, archivada
Propiedades:
esta_vencida: Indica si la reserva ya pasó su fechaduracion_horas: Calcula las horas totales de la reserva (1-16 horas)
Validaciones:
- ✅ La hora de fin debe ser posterior a la hora de inicio
- ✅ Duración máxima de 16 horas
- ✅ No pueden existir reservas con horarios superpuestos para la misma cancha
- ✅ Manejo especial de medianoche (00:00)
- Imágenes profesionales: Unsplash CDN (1200x600 para hero, 400x250 para cards)
- Fondo animado: GIF de futbolistas (Giphy CDN)
- Framework CSS: Bootstrap 5.3.0 + Bootstrap Icons
- Estilo: Tarjetas con sombras, gradientes, diseño moderno y responsivo
- Paleta de colores: Verde profesional con acentos en badges de estado
- Backend: Django 5.2.7
- Frontend: HTML5, CSS3, Bootstrap 5.3.0, Bootstrap Icons
- Base de datos: SQLite (desarrollo)
- CDN: Unsplash (imágenes), Giphy (GIF de fondo)
- Control de versiones: Git + GitHub
python manage.py runserverSi el puerto 8000 está ocupado, usa: python manage.py runserver 8080
python manage.py makemigrations
python manage.py migratepython manage.py createsuperuserCrea un nuevo superusuario con credenciales diferentes.
Verifica que las URLs de Unsplash/Giphy sean accesibles desde tu navegador.
- La base de datos
db.sqlite3está incluida en el repositorio para facilitar el desarrollo - El sistema archiva automáticamente reservas vencidas
- Los usuarios solo ven reservas futuras en la interfaz principal
- Los administradores tienen acceso completo al historial mediante el botón "Ver Historial"
Para cualquier problema o sugerencia, abre un issue en el repositorio de GitHub: github.com/Afav22-lab/reserva_canchas
Desarrollado usando Django | Sistema de Reservas de Canchas v2.0