12 KiB
Sistema de Asistencia MAC - FES Acatlán
Sistema de gestión de asistencia para ponencias y eventos académicos de Matemáticas Aplicadas y Computación (MAC).
🚀 Características
- Gestión de Eventos: Crear y administrar ponencias, talleres, seminarios
- Registro de Asistencia: Manual, por código de barras o usuarios externos
- Panel de Estudiantes: Consulta de estadísticas y eventos disponibles
- Panel de Asistentes: Administración completa y registro de asistencias
- Usuarios Externos: Sistema de aprobación para asistentes externos
- Estadísticas: Seguimiento de porcentaje de asistencia por estudiante
- Seguridad Avanzada: JWT, rate limiting, auditoría completa
- Sistema de Auditoría: Registro automático de eventos de seguridad
📋 Requisitos Previos
Opción 1: Con Docker (Recomendado)
- Docker y Docker Compose instalados
- Puertos 80 y 5432 disponibles
Opción 2: Instalación Manual
- Python 3.11+
- Node.js 18+
- npm o yarn
- PostgreSQL 15+
🛠️ Instalación
Opción 1: Con Docker (Recomendado)
Producción
# Clonar el repositorio
git clone <url-del-repositorio>
cd pagina-mac-og
# Copiar variables de entorno
cp .env.example .env
# IMPORTANTE: Editar .env y cambiar las credenciales para producción
# Cambiar: SECRET_KEY, DB_PASSWORD, etc.
# Construir e iniciar contenedores
docker-compose up --build -d
# Ver logs
docker-compose logs -f
# Acceder a la aplicación
# http://localhost
El sistema estará disponible en http://localhost con:
- Frontend: Servido por Nginx en puerto 80
- Backend: API REST en
/api/ - PostgreSQL: Base de datos (puerto 5432 expuesto)
Desarrollo
# Usar configuración de desarrollo
docker-compose -f docker-compose.dev.yml up --build -d
# Ver logs
docker-compose -f docker-compose.dev.yml logs -f backend
# Acceder al contenedor backend
docker-compose -f docker-compose.dev.yml exec backend bash
# Ejecutar tests
docker-compose -f docker-compose.dev.yml exec backend tox -e test
# Ver documentación completa de desarrollo
# docs/DESARROLLO.md
Características del entorno de desarrollo:
- ✅ Hot reload automático (Django runserver)
- ✅ Todas las herramientas de testing y calidad de código
- ✅ PostgreSQL con puerto expuesto para acceso desde host
- ✅ Debugging con ipdb
- ✅ Ver
docs/DESARROLLO.mdpara más detalles
Opción 2: Instalación Manual
Backend (Django)
- Crear entorno virtual:
cd backend
python -m venv venv
- Activar entorno virtual:
- Windows:
venv\Scripts\activate - Linux/Mac:
source venv/bin/activate
- Instalar dependencias:
pip install -r requirements.txt
⚠️ IMPORTANTE: Si acabas de clonar el repositorio o actualizaste con nuevas funcionalidades de importación/exportación, ejecuta:
pip install django-import-export openpyxl tablib
- Configurar variables de entorno:
cp .env.example .env
# Editar .env con tus configuraciones
- Ejecutar migraciones:
python manage.py migrate
- Crear superusuario (opcional):
python manage.py createsuperuser
- Ejecutar servidor:
python manage.py runserver
El backend estará disponible en http://127.0.0.1:8000
Frontend (React + Vite)
- Instalar dependencias:
cd frontend
npm install
- Ejecutar servidor de desarrollo:
npm run dev
El frontend estará disponible en http://localhost:5173
📥 Importación y Exportación de Datos
El sistema incluye funcionalidades de importación/exportación de estudiantes y asistentes mediante archivos Excel (.xlsx) o CSV.
Formato de Archivos para Importación
Los archivos deben tener exactamente 2 columnas:
| account_number | full_name |
|---|---|
| 1234567 | Juan Pérez García |
| 7654321 | María López Sánchez |
Desde el Panel de Admin de Django
- Ve a
http://127.0.0.1:8000/admin/ - Selecciona Estudiantes o Asistentes (Perfiles)
- Haz clic en "Importar" en la esquina superior derecha
- Selecciona tu archivo Excel (.xlsx) o CSV
- Revisa los cambios propuestos
- Confirma la importación
Exportación
- Selecciona los registros que deseas exportar
- En el menú de acciones, selecciona "📊 Exportar estudiantes/asistentes seleccionados"
- Haz clic en "Ir"
- Se descargará un archivo Excel con los datos
Creación Manual
También puedes crear estudiantes y asistentes manualmente:
- Ve al panel de admin de Django
- Selecciona Estudiantes o Asistentes (Perfiles)
- Haz clic en "Agregar estudiante" o "Agregar asistente"
- Completa los campos:
- Número de cuenta (7 dígitos)
- Nombre completo
- Guarda - el sistema creará automáticamente el usuario de Django asociado
📁 Estructura del Proyecto
mac_attendance/
├── backend/
│ ├── attendance/ # App de registro de asistencias
│ ├── authentication/ # App de autenticación y auditoría
│ ├── events/ # App de eventos y usuarios externos
│ ├── mac_attendance/ # Configuración principal y middleware
│ ├── scripts/ # Scripts de utilidad
│ │ ├── check_production.py # Verificar config de producción
│ │ └── test_ratelimit.py # Probar rate limiting
│ ├── static/ # Archivos estáticos
│ ├── media/ # Archivos subidos
│ ├── logs/ # Archivos de log (no trackeados)
│ ├── requirements.txt # Dependencias Python
│ └── .env.example # Ejemplo de variables de entorno
├── frontend/
│ ├── src/
│ │ ├── components/ # Componentes React
│ │ ├── contexts/ # Contextos (AuthContext)
│ │ └── services/ # Servicios API
│ └── package.json # Dependencias Node
├── docker/ # Archivos Docker
│ ├── Dockerfile.backend # Dockerfile producción
│ ├── Dockerfile.backend.dev # Dockerfile desarrollo
│ ├── Dockerfile.frontend # Dockerfile frontend
│ └── nginx.conf # Configuración Nginx
├── docs/ # Documentación del proyecto
│ ├── SECURITY.md # Guía de seguridad completa
│ ├── RATE_LIMITING.md # Documentación rate limiting
│ ├── AUDIT.md # Sistema de auditoría
│ ├── POSTGRESQL_MIGRATION.md # Migración a PostgreSQL
│ ├── DESARROLLO.md # Guía de desarrollo completa
│ └── ESTRUCTURA_PROYECTO.md # Estructura del proyecto
├── docker-compose.yml # Docker Compose producción
├── docker-compose.dev.yml # Docker Compose desarrollo
├── .env.example # Ejemplo de variables de entorno
└── README.md
🔐 Configuración Inicial
Crear Superusuario (Administrador)
Después de iniciar los contenedores, crea un superusuario para acceder al panel de administración:
# Con Docker
docker-compose exec backend python manage.py createsuperuser
# O en desarrollo
docker-compose -f docker-compose.dev.yml exec backend python manage.py createsuperuser
Sigue las instrucciones para crear:
- Username
- Password
Acceso al Sistema
Panel de Administración Django:
- URL:
http://localhost/admin/ - Usuario: El superusuario que acabas de crear
Aplicación Web:
- URL:
http://localhost/ - Los usuarios (asistentes y estudiantes) deben ser creados desde el panel de administración
- Usuarios externos pueden registrarse desde el formulario público
📊 Modelos Principales
UserProfile
- Tipo de usuario (estudiante/asistente)
- Número de cuenta (7 dígitos)
- Información personal
Event
- Título, descripción, ponente
- Fecha, hora de inicio/fin
- Modalidad (presencial/online/híbrido)
- Capacidad máxima
Attendance
- Estudiante o usuario externo
- Evento asociado
- Método de registro (manual/barcode/external)
- Registrado por (asistente)
ExternalUser
- Usuarios externos pendientes de aprobación
- Información de institución y motivo
- ID temporal único
🔧 Configuración Adicional
Variables de Entorno (.env)
SECRET_KEY=tu-clave-secreta
DEBUG=True
ALLOWED_HOSTS=localhost,127.0.0.1
CORS_ALLOWED_ORIGINS=http://localhost:5173
CORS
El backend está configurado para aceptar peticiones desde:
http://localhost:5173(desarrollo)http://127.0.0.1:5173(desarrollo)
🔒 Seguridad
Este proyecto implementa múltiples capas de seguridad:
Autenticación y Autorización
- ✅ JWT (JSON Web Tokens) para autenticación stateless
- ✅ Control de acceso basado en roles (estudiante/asistente)
- ✅ Tokens de corta duración (1 hora) con refresh tokens (7 días)
Protección contra Ataques
- ✅ Rate Limiting: Límites en todos los endpoints críticos
- Login: 5 intentos/minuto por IP
- Registro externo: 3/hora por IP
- Ver
docs/RATE_LIMITING.mdpara detalles
- ✅ Headers de seguridad HTTP (HSTS, X-Frame-Options, etc.)
- ✅ Sanitización automática de datos sensibles en logs
Sistema de Auditoría
- ✅ Registro automático de eventos de seguridad
- ✅ Trazabilidad completa: IP, user agent, timestamp
- ✅ Logs inmutables consultables desde Django Admin
- ✅ Ver
docs/AUDIT.mdpara documentación completa
Documentación de Seguridad
- 📄
docs/SECURITY.md- Guía de seguridad y checklist de producción - 📄
docs/RATE_LIMITING.md- Configuración de rate limiting - 📄
docs/AUDIT.md- Sistema de auditoría
🧪 Testing y Calidad de Código
El proyecto incluye un entorno completo de testing y calidad de código usando Tox.
Ejecutar Tests
# Con Docker (desarrollo)
docker-compose -f docker-compose.dev.yml exec backend tox -e test
# Tests rápidos
docker-compose -f docker-compose.dev.yml exec backend tox -e test-fast
# Con cobertura
docker-compose -f docker-compose.dev.yml exec backend tox -e coverage
Herramientas Disponibles
- Testing: pytest, pytest-django, pytest-cov, factory-boy
- Linting: flake8, pylint, black, isort
- Type Checking: mypy con stubs para Django/DRF
- Seguridad: bandit, safety
- Métricas: radon (complejidad ciclomática)
Ver docs/DESARROLLO.md para documentación completa.
🐘 PostgreSQL
El sistema usa PostgreSQL como base de datos para producción.
Acceso desde Host
⚠️ Configurar credenciales en archivo .env antes de usar:
Host: localhost
Port: 5432
Database: [DB_NAME del .env]
User: [DB_USER del .env]
Password: [DB_PASSWORD del .env]
Comandos Útiles
# Conectarse con psql
psql -h localhost -p 5432 -U mac_user -d mac_attendance
# Backup
docker-compose exec db pg_dump -U mac_user mac_attendance > backup.sql
# Restore
cat backup.sql | docker-compose exec -T db psql -U mac_user mac_attendance
Ver docs/POSTGRESQL_MIGRATION.md para más detalles.
📚 Documentación
docs/DESARROLLO.md- Guía completa de desarrollodocs/SECURITY.md- Guía de seguridad y checklist de produccióndocs/RATE_LIMITING.md- Configuración de rate limitingdocs/AUDIT.md- Sistema de auditoríadocs/POSTGRESQL_MIGRATION.md- Migración a PostgreSQLdocs/ESTRUCTURA_PROYECTO.md- Estructura del proyecto
🚧 Mejoras Futuras
- Implementar JWT para autenticación
- Sistema de auditoría y logging
- Rate limiting en endpoints
- Dockerización del proyecto
- Migración a PostgreSQL
- Entorno de desarrollo con Tox
- Agregar exportación de reportes (CSV/PDF)
- Implementar lector de códigos de barras
- Notificaciones por email
- Panel de estadísticas avanzadas
- Cobertura de tests > 80%
📝 Licencia
Este proyecto está bajo la Licencia MIT.
👥 Contribución
- Fork el proyecto
- Crea una rama para tu feature (
git checkout -b feature/nueva-funcionalidad) - Commit tus cambios (
git commit -m 'Agregar nueva funcionalidad') - Push a la rama (
git push origin feature/nueva-funcionalidad) - Abre un Pull Request
📧 Soporte
Para preguntas o soporte técnico sobre el sistema, contactar a:
- Matemáticas Aplicadas y Computación (MAC)
- FES Acatlán - UNAM
Desarrollado para: Matemáticas Aplicadas y Computación (MAC) Institución: FES Acatlán - UNAM Año: 2025