4.9 KiB
Encuestas
Aplicación desarrollada en Python (Flask) para la gestión de Encuestas on-line.
Esta preparada para ejecutarse en Contenedores
Estructura base de la aplicación:
.
├── app.py
└─── encuestas
├── fichero-01.encuesta
└── otro_fichero.encuesta
Directorio de Encuestas
Cuando está en ejecución, la aplicacion app.py busca en el directorio data todos los ficheros con extensión .encuesta
En la ejecución montamos el directorio encuestas como volumen data en el contenedor.
Esto nos permite ir modificando o creando nuevas encuestas sin necesidad de reiniciar la aplicación.
Visualización de Encuestas
Si no hay ningun fichero .encuestas se muestra una página similar a esta:
Si encuentra ficheros, se revisa el valor del campo activa que puede ser true o false
Este valor determina si la encuesta se encuentra Activa o ha Finalizado, y segun estos valores las muestra en una zona u otra:
Encuestas Finalizadas
Unicamente se pueden ver los resultados de la votación, pero no se puede votar en ella.
Encuestas Activas
- Se puede participar en la encuesta y votar:
- Se puede simplemente ver los resultados sin votar:
Imagen y Contenedor de Encuestas
Construir la imagen
El Dockerfile para crear la imagen es muy sencillo:
FROM python:3.11-slim
WORKDIR /app
RUN pip install --no-cache-dir flask
EXPOSE 8080
CMD ["python", "app.py"]
La contrucción de la imagen encuestas es muy sencilla:
docker build -t encuestas .
Ejecutar el contenedor
Para que la aplicación funcione correctamente al iniciar el contenedor vamos a realizar el montaje de 2 recursos:
- Fichero con el código de la aplicacion:
app.pylo vamos a montar en el contenedor en el directorio/app/ - Directorio de Encuestas:
./encuestas/lo vamos a montar en el contenedor como si el directorio/data/
La manera de iniciarlo desde la terminal sería:
# Detener y borrar cualquier contenedor de encuestas previo
docker rm -f encuestas 2> /dev/null
# Iniciar contenedor encuestas
docker run -d \
--name encuestas \
--restart always \
-p 8080:8080 \
-v ${PWD}/app.py:/app/app.py \
-v ${PWD}/encuestas:/data \
encuestas
Una vez se haya iniciado el conetendor, puedes ver la aplicación web desde la URL desde donde se ejecuta o si es en modo local conectandote a: http://localhost:8080
Si necesitas que se inicie en otro puerto cambia en la ejecución de docker run la línea -p 8080:8080 por el puerto que desees: -p MI_PUERTO:8080
Formato de los ficheros de Encuestas
Se considera un fichero de encuestas todos los ficheros que terminen en .encuesta y estén dentro del directorio encuestas (que se montará en /data/)
El formato que se utiliza es el de un fichero INI (muy sencillo de procesar) en que cada Sección (identificada por corchetes) tiene varios campos de datos identificados por pares clave = valor
Se permite el uso de comentarios mediante # o ;
Además como luego se va a procesar y "pintar" en HTML se permite el uso de etiquetas HTML, tales como:
- Negrita:
<b> </b> - Cursiva:
<em> </em>ó<i> </i> - Colores:
- Rojo:
<span style="color: red;"> ... </span> - Verde:
<span style="color: green;"> ... </span> - Azul:
<span style="color: blue;"> ... </span>
- Rojo:
Por cada Opción (identificada por su NUMERO) de respuesta tiene que existir en la sección Votos el mismo NUMERO en el que guardar los votos.
El formato básico es:
[encuesta]
titulo = Titulo de la Encuesta
pregunta = Texto de la pregunta para saber qué opción prefiere
# activa = true|false
activa = true
[opciones]
# n = texto de la opcion
1 = Texto de la opcion 1
2 = Texto de la opcion 2
3 = Texto de la opcion 3
4 = Texto de la opcion 4
[votos]
# Inicializar con valor 0
1 = 0
2 = 0
3 = 0
4 = 0
Orden y Nombres de las Encuestas
La aplicación lee de forma alfabética los ficheros .encuesta y utiliza ese orden para mostrar las encuestas, tanto las activas como las finalizadas.
El nombre de los ficheros no tiene ninguna limitación, puedes escribirlos como desees siempre y cuando finalicen en .encuesta
Se recomienda:
- Uso de un Prefijo: El uso de un prefijo numérico para el renombrado de los ficheros permite forzar el orden a la hora de mostrarse vía Web.
- Letra ó Código para el Estado: Si tienes muchas encuestas, puedes incluir al nombre de fichero una letra o un identificador para saber si una encuesta está Activa (
A) o ha Finalizado (F).
Por ejemplo:
.
├── app.py
└─── encuestas
├── 001-A_Que_Distro_Linux_usas.encuesta
├── 002-A_Editor_Nano-Joe-Vi-eMacs.encuesta
├── 001-F_Distro_Linux_para_PRO.encuesta
└── 099-A_Que_IDE-Framework_usas.encuesta




