📤 Publicar
Objetivo principal: convertir la carpeta que ha entregado un alumno en una versión publicada con su dirección respondiendo, sin escribir ninguna configuración.
📸 Mapeo de interfaz
El formulario vacío, tal como se abre. Los tres campos son obligatorios.

🧩 Despiece de elementos funcionales
Los elementos marcados con — no aparecen señalados en la captura: existen en la plataforma, pero la imagen no los numera.
| # | Nombre del elemento | Tipo | Destino / Acción | Descripción funcional |
|---|---|---|---|---|
| 1 | Publicar | Título de página | — | Nombra la vista |
| 2 | Publicar | Pestaña activa | /pantalla/publicar | La pestaña en la que estás |
| 3 | Ensayo, no producción | Aviso permanente | — | Los cuatro límites y la advertencia de que no se aplican |
| 4 | Publicar el proyecto de un alumno | Título de sección | — | Encabeza el formulario |
| 5 | Identificador de la cuenta del alumno | Campo de texto | — | La autoría. Es lo que se borrará al retirar la versión, y lo que decide si una publicación choca con otra del mismo alumno |
| 6 | Nombre del modelo | Campo de texto | — | El nombre que le pone quien lo escribe. No incluye el número de versión: ese lo asigna el sistema |
| 7 | Letras, dígitos, punto, guion y guion bajo | Texto de ayuda | — | Dice qué caracteres admiten los dos campos anteriores, y por qué: con ellos se compone una carpeta en el servidor, por eso no admiten barras |
| 8 | Los archivos del alumno | Selector de archivos | — | La carpeta entregada. Admite varios archivos |
| 9 | Hace falta al menos modelo.py | Texto de ayuda | — | Lo mínimo, más la recomendación de incluir requirements.txt y todo lo que su código abra. Lo que solo sirvió para entrenar no hace falta que viaje |
| 10 | Al pulsar, esta página se queda esperando | Aviso de la acción | — | Avisa de que la publicación es síncrona y puede pasar del minuto, y de que recargar no cancela nada y puede lanzar una segunda publicación |
| 11 | Publicar | Botón de envío | POST /pantalla/publicar | Lanza la publicación. La página se bloquea hasta que termina y responde en la misma pantalla |
| 12 | Pie de la vista | Texto explicativo | — | La fecha de lectura y la advertencia de que no hay comprobación de identidad |
| — | Número de versión | Campo que ya no existe | — | El formulario lo pedía hasta que se decidió que el identificador lo asigna el sistema. Si esperabas encontrarlo, no está, y es deliberado |
💡 Guía de uso
Qué hay que tener a mano antes de pulsar: el identificador de la cuenta del alumno, el nombre que le ha puesto a su modelo y su carpeta de archivos.
El número de versión no se pide. La plataforma lo asigna: al primero que publique clima
le toca clima/1, al siguiente clima/2. Está explicado en
Lo que comprueba.
Qué pasa mientras esperas. La plataforma revisa el material, valida la firma, resuelve los paquetes, construye y levanta la dirección. En una publicación sin dependencias tarda unos segundos; con paquetes nuevos, más de un minuto.
Recargar no cancela la publicación en curso y puede lanzar una segunda. Si la página parece colgada, sigue esperando: cuando acabe, te dirá en esa misma pantalla si salió o por qué no.
Si la publicación se rechaza, el mensaje trae tres partes: qué se intentaba, qué lo provocó y qué hacer. Está pensado para dárselo tal cual al alumno. Los rechazos también quedan en Actividad.
Si la publicación se queda a medias —se inventarió pero la dirección no llegó a levantar—, la versión aparece en el inventario como publicándose, y desde ahí se puede retirar. No es un error que haya que reparar a mano.
Un requirements.txt vacío es correcto. Si la lógica del alumno solo usa Python, no hay
nada que declarar. Que esté vacío no es un olvido.