Sistema completo de gestión de aerolínea desarrollado con Django y Django Rest Framework, que incluye funcionalidades web tradicionales y API REST para integración con aplicaciones móviles y sistemas externos.
- Características
- Tecnologías Utilizadas
- Instalación
- Configuración
- Uso Web
- API REST
- Tests Unitarios
- Documentación
- Estructura del Proyecto
- Autenticación
- Contribución
- Gestión de Vuelos: Crear, editar, listar y buscar vuelos
- Gestión de Pasajeros: Registro y administración de pasajeros
- Sistema de Reservas: Reservar asientos y gestionar reservas
- Gestión de Aviones: Administrar flota de aviones
- Interfaz Responsive: Diseño adaptable a diferentes dispositivos
- Endpoints Completos: CRUD para todas las entidades
- Autenticación JWT: Sistema seguro de autenticación
- Permisos y Roles: Administradores vs usuarios normales
- Filtros Avanzados: Búsqueda y filtrado de datos
- Documentación Interactiva: Swagger UI integrado
- Tests Unitarios: Cobertura completa de endpoints API
- Tests de Autenticación: Validación de permisos y roles
- Tests de Funcionalidad: Verificación de operaciones CRUD
- Django 5.2.3 - Framework web principal
- Django Rest Framework - API REST
- JWT Authentication - Autenticación segura
- SQLite - Base de datos (desarrollo)
- Django Filters - Filtrado avanzado
- DRF-YASG - Documentación automática
- HTML5/CSS3 - Interfaz web
- Bootstrap - Framework CSS
- JavaScript - Interactividad
- Sentry - Monitoreo de errores
- Git - Control de versiones
- Python 3.8+
- pip (gestor de paquetes de Python)
- Git
git clone [url-del-repositorio]
cd EFI-ing-Aerolinea/aerolinea# Crear entorno virtual
python -m venv venv
# Activar entorno virtual
# En Windows:
venv\Scripts\activate
# En Linux/Mac:
source venv/bin/activatepip install -r requirements.txt# Crear migraciones
python manage.py makemigrations
# Aplicar migraciones
python manage.py migratepython manage.py createsuperuserpython manage.py runserverEl proyecto está configurado para desarrollo. Para producción, configura:
# settings.py
DEBUG = False
ALLOWED_HOSTS = ['tu-dominio.com']
SECRET_KEY = 'tu-secret-key-seguro'Por defecto usa SQLite. Para producción, configura PostgreSQL o MySQL:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'aerolinea_db',
'USER': 'usuario',
'PASSWORD': 'password',
'HOST': 'localhost',
'PORT': '5432',
}
}- Navega a
http://127.0.0.1:8000/ - Inicia sesión con tu usuario
- Explora las diferentes secciones:
- Vuelos: Gestionar vuelos disponibles
- Pasajeros: Administrar pasajeros
- Reservas: Crear y gestionar reservas
- Aviones: Gestionar flota
- Dashboard: Vista general del sistema
- Gestión de Vuelos: CRUD completo de vuelos
- Gestión de Pasajeros: Registro y administración
- Sistema de Reservas: Reservar asientos
- Reportes: Consultas y estadísticas
- Swagger UI:
http://127.0.0.1:8000/swagger/ - API Base:
http://127.0.0.1:8000/api/
curl -X POST http://127.0.0.1:8000/api/token/ \
-H "Content-Type: application/json" \
-d '{"username": "tu_usuario", "password": "tu_password"}'curl -H "Authorization: Bearer tu_token_aqui" \
http://127.0.0.1:8000/api/flights/GET /api/flights/- Listar vuelosPOST /api/flights/- Crear vuelo (admin)GET /api/flights/{id}/- Detalle de vueloGET /api/flights/search/- Buscar vuelosGET /api/flights/{id}/passengers/- Pasajeros por vuelo (admin)
GET /api/passengers/- Listar pasajerosPOST /api/passengers/- Crear pasajero (admin)GET /api/passengers/{id}/reservations/- Reservas del pasajero
GET /api/reservations/- Listar reservasPOST /api/reservations/- Crear reservaGET /api/reservations/check_seat/- Verificar asientoPOST /api/reservations/{id}/confirm/- Confirmar reservaPOST /api/reservations/{id}/cancel/- Cancelar reserva
GET /api/planes/- Listar avionesGET /api/planes/{id}/seats/- Asientos del avión
GET /api/tickets/- Listar boletosGET /api/tickets/by_barcode/- Consultar por códigoPOST /api/tickets/{id}/generate/- Generar boleto (admin)
python manage.py test gestionVuelos.tests_api# Tests de vuelos
python manage.py test gestionVuelos.tests_api.FlightAPITestCase
# Tests de pasajeros
python manage.py test gestionVuelos.tests_api.PassengerAPITestCase
# Tests de reservas
python manage.py test gestionVuelos.tests_api.ReservationAPITestCase
# Tests de boletos
python manage.py test gestionVuelos.tests_api.TicketAPITestCase# Ejemplo: test de listar vuelos
python manage.py test gestionVuelos.tests_api.FlightAPITestCase.test_list_flights_authorized# Mostrar detalles de cada test
python manage.py test gestionVuelos.tests_api -v 2
# Mostrar solo los nombres de los tests
python manage.py test gestionVuelos.tests_api -v 1# Instalar coverage (opcional)
pip install coverage
# Ejecutar con cobertura
coverage run --source='.' manage.py test gestionVuelos.tests_api
coverage report
coverage html # Genera reporte HTML- ✅ Listar vuelos sin autenticación
- ✅ Listar vuelos con autenticación
- ✅ Crear vuelos (solo administradores)
- ✅ Buscar vuelos por origen/destino
- ✅ Ver pasajeros de vuelo (solo administradores)
- ✅ Crear pasajeros (solo administradores)
- ✅ Ver reservas de pasajero
- ✅ Crear reserva
- ✅ Verificar disponibilidad de asiento
- ✅ Confirmar reserva
- ✅ Cancelar reserva
- ✅ Generar boleto (solo administradores)
- ✅ Consultar boleto por código
............. # 13 tests ejecutados
----------------------------------------------------------------------
Ran 13 tests in 18.977s
OK
F............ # 1 test falló
----------------------------------------------------------------------
FAIL: test_create_flight_admin_only
Accede a la documentación interactiva en:
- URL:
http://127.0.0.1:8000/swagger/ - Funcionalidades: Probar endpoints directamente
- Autenticación: Login integrado con JWT
/api/
├── flights/ # Gestión de vuelos
├── passengers/ # Gestión de pasajeros
├── reservations/ # Sistema de reservas
├── planes/ # Gestión de aviones
├── tickets/ # Sistema de boletos
└── auth/ # Autenticación JWT
aerolinea/
├── gestionVuelos/
│ ├── models.py # Modelos de datos
│ ├── views_api.py # API REST endpoints
│ ├── serializers.py # Serializers para API
│ ├── tests_api.py # Tests unitarios
│ ├── urls_api.py # URLs de la API
│ ├── views.py # Vistas web
│ ├── urls.py # URLs web
│ └── templates/ # Templates HTML
├── aerolinea/
│ ├── settings.py # Configuración Django
│ └── urls.py # URLs principales
├── home/ # App de autenticación
├── requirements.txt # Dependencias
└── README.md # Este archivo
- Login tradicional con usuario/contraseña
- Sesiones persistentes
- Logout automático
- Tokens de acceso (30 minutos)
- Tokens de refresh (1 día)
- Autenticación por header
Authorization: Bearer <token>
- Administradores: Acceso completo a todas las funcionalidades
- Usuarios: Acceso limitado a consultas y reservas propias
# Ejecutar servidor
python manage.py runserver
# Crear migraciones
python manage.py makemigrations
# Aplicar migraciones
python manage.py migrate
# Crear superusuario
python manage.py createsuperuser
# Cargar datos de prueba
python manage.py loaddata fixtures/datos_prueba.json# Ejecutar todos los tests
python manage.py test
# Tests con verbosidad
python manage.py test -v 2
# Tests específicos
python manage.py test gestionVuelos.tests_api# Resetear base de datos
rm db.sqlite3
python manage.py migrate
python manage.py createsuperuser- Listar vuelos disponibles
- Crear/editar/eliminar vuelos
- Buscar vuelos por criterios
- Gestionar pasajeros por vuelo
- Registro de pasajeros
- Consulta de información
- Historial de reservas
- Validaciones de datos
- Crear reservas
- Seleccionar asientos
- Confirmar/cancelar reservas
- Verificar disponibilidad
- Administrar flota
- Layout de asientos
- Verificar disponibilidad
- Tipos de asientos
- Generar boletos
- Consultar por código
- Validaciones de estado
- Códigos únicos
- Endpoints completos
- Autenticación JWT
- Permisos y roles
- Filtros y búsquedas
- Documentación Swagger
- Tests unitarios
- Tests de autenticación
- Tests de permisos
- Cobertura completa
- Total de tests: 13 ✅
- Cobertura: Endpoints API completos
- Autenticación: JWT implementada
- Permisos: Admin vs Usuario normal
- Estado: ✅ Todos los tests pasando
- Documentación: Swagger UI integrado
Druetta Cristian
Fecha: 2025
Proyecto: Sistema de Gestión de Vuelos
¡El proyecto está completo y listo para usar! 🚀