Un sistema web completo para gestionar el acceso de estudiantes a clases basado en planes mensuales.
- 📚 Gestión de Estudiantes: Registro completo con nombre, documento y timestamps
- 📋 Planes Flexibles: Definición de planes con número de ingresos mensuales
- 👥 Asignación de Planes: Vinculación de estudiantes a planes con fechas de vigencia
- 🚪 Control de Acceso: Validación automática de ingresos basada en planes activos
- 📊 Reportes: Informes detallados por estudiante y por plan
- 🔒 Autenticación: Sistema seguro para administradores y acceso simple para estudiantes
- 🐳 Docker Ready: Desplegado fácil con Docker Compose
- Backend: FastAPI con Python 3.11
- Base de Datos: PostgreSQL 15
- ORM: SQLAlchemy con Alembic para migraciones
- Frontend: HTML + Bootstrap 5 + JavaScript
- Autenticación: JWT tokens
- Contenedores: Docker & Docker Compose
- Docker y Docker Compose instalados
- Git para clonar el repositorio
- Clonar y crear la estructura del proyecto:
mkdir access_control_system
cd access_control_system-
Crear todos los archivos según la estructura mostrada en los artefactos
-
Construir y ejecutar con Docker:
docker-compose up --build- Acceder al sistema:
- Aplicación: http://localhost:8000
- Administrador: admin / admin123
access_control_system/
├── docker-compose.yml # Configuración de contenedores
├── Dockerfile # Imagen de la aplicación
├── requirements.txt # Dependencias Python
├── alembic.ini # Configuración de migraciones
├── app/ # Código de la aplicación
│ ├── main.py # Aplicación principal FastAPI
│ ├── database.py # Configuración de base de datos
│ ├── models.py # Modelos SQLAlchemy
│ ├── schemas.py # Esquemas Pydantic
│ ├── crud.py # Operaciones de base de datos
│ ├── auth.py # Autenticación y autorización
│ ├── config.py # Configuración de la aplicación
│ └── routers/ # Rutas de la API
├── templates/ # Plantillas HTML
│ ├── base.html # Plantilla base
│ ├── login.html # Página de login
│ ├── admin/ # Páginas de administración
│ ├── student/ # Páginas de estudiantes
│ └── reports/ # Páginas de reportes
└── static/ # Archivos estáticos (CSS, JS)
-
Acceso: http://localhost:8000/admin/login
- Usuario:
admin - Contraseña:
admin123
- Usuario:
-
Funcionalidades:
- Estudiantes: Crear, editar, eliminar y buscar estudiantes
- Planes: Definir planes con número de ingresos mensuales
- Asignación: Vincular estudiantes a planes con fechas
- Registros: Ver todos los accesos registrados
- Reportes: Generar informes por estudiante o plan
- Acceso: http://localhost:8000/student/access
- Proceso:
- Ingresar número de documento
- El sistema valida automáticamente:
- Existencia del estudiante
- Plan activo vigente
- Ingresos disponibles en el mes
- Registra el acceso si todo es válido
POST /api/admin/login- Login de administradorGET /api/admin/me- Información del usuario actual
GET /api/students/- Listar estudiantesPOST /api/students/- Crear estudianteGET /api/students/{id}- Obtener estudiantePUT /api/students/{id}- Actualizar estudianteDELETE /api/students/{id}- Eliminar estudiante
GET /api/plans/- Listar planesPOST /api/plans/- Crear planGET /api/plans/{id}- Obtener planPUT /api/plans/{id}- Actualizar planDELETE /api/plans/{id}- Eliminar plan
GET /api/student-plans/- Listar asignacionesPOST /api/student-plans/- Crear asignaciónGET /api/student-plans/{id}- Obtener asignaciónPUT /api/student-plans/{id}- Actualizar asignaciónDELETE /api/student-plans/{id}- Eliminar asignación
GET /api/access-logs/- Listar registrosPOST /api/access-logs/- Crear registroPOST /api/access-logs/student-access- Acceso de estudiante
GET /api/reports/student/{id}- Reporte de estudianteGET /api/reports/plan/{id}- Reporte de plan
DATABASE_URL=postgresql://admin:admin123@db:5432/access_control
SECRET_KEY=your-secret-key-change-this-in-production
ADMIN_USERNAME=admin
ADMIN_PASSWORD=admin123El sistema usa PostgreSQL con las siguientes tablas:
students- Información de estudiantesplans- Definición de planesstudent_plans- Asignación de planes a estudiantesaccess_logs- Registro de accesosadmins- Usuarios administradores
# Instalar dependencias
pip install -r requirements.txt
# Configurar base de datos
alembic upgrade head
# Ejecutar servidor
uvicorn app.main:app --reloadalembic revision --autogenerate -m "descripción de cambios"
alembic upgrade head- Autenticación JWT para administradores
- Contraseñas hasheadas con bcrypt
- Validación de datos con Pydantic
- Protección CSRF en formularios
- Sanitización de entradas
Para producción, asegúrate de:
- Cambiar las credenciales por defecto
- Usar una SECRET_KEY segura
- Configurar HTTPS
- Implementar backups de base de datos
- Monitoreo y logs
- Limitar acceso a puertos de base de datos
Este sistema está diseñado para ser simple pero robusto. Incluye:
- Manejo de errores completo
- Validaciones de integridad
- Interfaz intuitiva
- Documentación automática de API en
/docs - Logs detallados para debugging
Proyecto de código abierto para uso educativo y comercial.