¡Este es un texto traducido por máquina que puede contener errores!
Debes desarrollar un
Un panel de control es una página web que muestra información de manera clara y organizada. En esta tarea se te proporcionarán datos de ejemplo sobre diferentes dispositivos en una red, y deberás usar Flask y Jinja para presentar dicha información.
El objetivo no es crear aún un sistema real de monitoreo. Aquí el enfoque principal será practicar lo siguiente:
Flask rutas (routes) plantillas (templates) - enviar información desde Python a HTML
- comprobaciones con
if y buclesfor en Jinja - crear una página web ordenada y fácil de usar
Teoría
Encontrarás la teoría en
Lee especialmente la parte sobre
Si necesitas más información, también puedes usar la documentación oficial de Flask aquí:
¿Algo diferente de Flask?
Si deseas usar otro marco de trabajo, consulta primero con el profesor.
Datos que puedes usar ✅
Puedes usar los siguientes datos como punto de partida pulsa aquí
devices = [
{
"name": "Rutas principales",
"ip": "192.168.1.1",
"hostname": "router.local",
"device_type": "Enrutador",
"status": "online",
"response_time": 12,
"location": "Sala de servidores",
"last_checked": "14:32:10",
"uptime": "12 días",
"open_ports": [53, 80, 443],
"os": "RouterOS",
"notes": "Ruta principal de la red"
},
{
"name": "Servidor web",
"ip": "192.168.1.20",
"hostname": "webserver.local",
"device_type": "Servidor",
"status": "online",
"response_time": 34,
"location": "Sala de servidores",
"last_checked": "14:32:12",
"uptime": "4 días",
"open_ports": [22, 80, 443],
"os": "Ubuntu Server",
"notes": "Ejecuta sitio web interno"
},
{
"name": "Impresora",
"ip": "192.168.1.50",
"hostname": "printer-01.local",
"device_type": "Impresora",
"status": "offline",
"response_time": None,
"location": "Aula 204",
"last_checked": "14:32:14",
"uptime": None,
"open_ports": [],
"os": "Desconocido",
"notes": "No respondió en la última verificación"
},
{
"name": "PC del profesor",
"ip": "192.168.1.101",
"hostname": "teacher-pc.local",
"device_type": "Equipo informático",
"status": "online",
"response_time": 18,
"location": "Aula 204",
"last_checked": "14:32:16",
"uptime": "6 horas",
"open_ports": [445],
"os": "Windows 11",
"notes": ""
},
{
"name": "NAS",
"ip": "192.168.1.30",
"hostname": "storage.local",
"device_type": "Servidor de almacenamiento",
"status": "warning",
"response_time": 87,
"location": "Sala de servidores",
"last_checked": "14:32:18",
"uptime": "38 días",
"open_ports": [22, 80, 443, 445],
"os": "TrueNAS",
"notes": "Tiempo de respuesta alto"
}
]
No necesitas mostrar toda la información. Elige tú lo que se ajuste a tu panel de control. También puedes modificar, agregar o eliminar datos si deseas, o si consideras que algunos son inexactos (por ejemplo: ¿quizás el tiempo activo debería estar en segundos? 🤔).
La tarea
1. Crea un panel de control (dashboard)
Crea una página web que muestre información sobre los dispositivos en la red.
El aspecto del panel de control es decisión tuya.
Por ejemplo, puedes utilizar:
- tarjetas para cada dispositivo
- tablas
- indicadores de estado
- secciones
- iconos
- colores
- estadísticas o resúmenes
El panel de control debe ser fácil de entender cuando alguien abra la página.
2. Usar Flask y rutas
La aplicación debe usar Flask.
Debes tener al menos:
- una ruta que muestre la página principal/tablero de control (dashboard)
- una ruta adicional con otra función
Tú decides para qué se utiliza la ruta adicional.
Por ejemplo, puede:
- mostrar información sobre un dispositivo específico
- mostrar solo los dispositivos que están fuera de línea
- mostrar una página de estado propia
- mostrar más detalles
- mostrar una simple página “acerca de” (about)
3. Usa plantillas
Las páginas HTML deben estar en una carpeta llamada
Los datos se enviarán desde el código de Python a la plantilla mediante Flask. Debes usar Jinja para mostrar la información dinámicamente.
La solución debe utilizar:
- variables
- un bucle
for - una comprobación
if
Por lo tanto, no debes escribir manualmente la información sobre todos los dispositivos en el código HTML.
4. Muestra el estado de manera clara
El panel debe facilitar la visualización del estado de los dispositivos.
Por ejemplo:
- 🟢 En línea
- 🟡 Advertencia
- 🔴 Desconectado
Puedes usar texto, CSS, iconos u otras soluciones visuales.
5. Haz el panel de control tuyo
No existe una única forma correcta de resolver esta tarea.
Piensa en lo siguiente:
- ¿Qué información es la más importante?
- ¿Qué debería ver primero el usuario?
- ¿Qué no necesita mostrarse?
- ¿Cómo puede mostrarse el estado con claridad?
- ¿Cómo puede mantenerse limpia la página aunque haya muchos dispositivos?
- Puedes usar CSS y, si lo deseas, también JavaScript.
Requisitos
La solución debe:
- usar Python y Flask
- usar al menos dos rutas (routes)
- usar al menos una plantilla HTML
- enviar datos desde Python a la plantilla
- usar Jinja
- usar al menos un bucle
for(for ) - usar al menos una comprobación de condición (
if) (if ) - mostrar varias entidades del conjunto de datos
- tener una forma clara de mostrar el estado
¿Listo?
- ¡Desafío! - Mejora el panel de control
Si terminas, puedes ampliar la solución.
Por ejemplo, puedes:
- crear una página de detalles para cada dispositivo
- filtrar dispositivos por estado
- ordenar los dispositivos
- mostrar el número de dispositivos que están en línea/fuera de línea
- mostrar el tiempo medio de respuesta
- crear búsqueda o filtrado
- agregar más dispositivos
- crear gráficos u otra visualización
- hacer que el panel de control sea adaptable (responsive)
- crear un diseño más elaborado
Desafío adicional - Verificación de red real
Si deseas ir más allá, puedes investigar cómo Python puede verificar si una máquina real responde en la red. Por ejemplo, puedes explorar lo siguiente:
ping- Nmap
- puertos y servicios
Esto no es un requisito en la tarea principal.
Entrega
Haz esto
Entrega el trabajo al hacer un commit de tu trabajo en
El repositorio debe contener:
- El código Python de la aplicación Flask
- Plantillas HTML
- Archivos CSS y JavaScript si los hay
- Una breve explicación de cómo funciona la solución
- Una breve explicación de cómo has utilizado
rutas (routes) ysistema de plantillas (templating)
La explicación puede, por ejemplo, estar en su propio archivo .md.