Durante esta práctica, los alumnos serán capaces de:
Esta actividad promueve las siguientes habilidades, valores y actitudes: análisis y síntesis, capacidad de resolver problemas, creatividad, y uso eficiente de la informática y las telecomunicaciones.
NOTA IMPORTANTE: Las actividades de la práctica se pueden elaborar de manera individual o en parejas. El reporte de la práctica de laboratotio debe ser desarrollado de manera individual.
Se tiene un proyecto de Django ya existente en el siguiente archivo: lab9.tgz. Descarga y descomprime este archivo. Corre el servidor de desarrollo de Django y prueba los siguientes URLs.
URL | Descripción |
---|---|
http://localhost:8000/lab9/index.html | Página de bienvenida. |
http://localhost:8000/lab9/chorrito.txt | "El Chorrito" de Francisco Gabilondo Soler. |
http://localhost:8000/lab9/apocalipsis13.txt | Capítulo 13 del libro de Apocalipsis. |
http://localhost:8000/lab9/elefante.txt | Arte ASCII de un elefante. |
http://localhost:8000/lab9/primos/5 | Los primeros 5 números primos. |
http://localhost:8000/lab9/primos/100 | Los primeros 100 números primos. |
http://localhost:8000/lab9/cuadro/20 | Una imagen de un cuadro de 20×20 píxeles. |
http://localhost:8000/lab9/cuadro/150 | Una imagen de un cuadro de 150×150 píxeles. |
Revisa cuál es el Content-type
de cada uno de los recursos referidos por las ligas de la tabla anterior, presionando Ctrl-I
en cuanto el recurso solicitado sea desplegado en el navegador. Busca Type
en la ventana que se abre; debe ser uno de los siguientes: text/html
, text/plain
o image/png
.
En esta práctica escribirás un componente de middleware de Django que permitirá hacer un post-procesamiento del lado del servidor de las peticiones de HTTP justo antes de que se envían al cliente. Para esto, deberás revisar la documentación de Django sobre Middleware. Así mismo, para este ejercicio también te resultará útil consultar la documentación de la clase HttpResponse.
Cuando se solicita al servidor un recurso que tiene un Content-type
igual a text/plain
, el navegador lo despliega de manera similar a como aquí se muestra:
Para darle un look más "retro", se desea que en su lugar la salida del navegador sea algo así (en honor al papel stock de las impresoras de matriz de puntos de antaño):
Para lograr esto, deberás desarrollar en Python un componente de middleware de Django que realice un post-procesamiento de todos las respuestas (responses) que tengan un Content-type
igual a text/plain
. A continuación se indica de manera general lo que se tiene que hacer.
En el directorio lab9
del proyecto provisto, añade un archivo llamado retro.py
. En este archivo coloca una clase llamada RetroMiddleware
que contenga el método process_response
tal como se indica en la documentación. Actualiza la variable MIDDLEWARE_CLASSES
en el archivo settings.py
para dar de alta la clase lab9.retro.RetroMiddleware
.
En el método process_response
deberás verificar el Content-type
de la respuesta que se está por enviar al cliente. Si es text/plain
deberás en su lugar generar una nueva respuesta que corresponda a una página de HTML5 que contenga dentro de una etiqueta <pre></pre>
el contenido de la petición original. Adicionalmente, deberás emplear CSS en esta nueva página para usar el archivo static/fondo.png
como imagen de fondo. Sin embargo, deberás devolver la respuesta original si su Content-type
es cualquier cosa distinta a text/plain
.
NOTA: No debes modificar de forma alguna los archivos lab9/views.py
ni lab9/urls.py
, ni tampoco los archivos con extensión .txt
en el directorio lab9/templates
.
Prueba nuevamente las ligas de la tabla de arriba para verificar que todo funciona de la manera esperada. Sólo los recursos que eran inicialmente text/plain
deben producir una salida diferente; los demás no tienen porque haber sufrido cambio alguno.
Para entregar tu trabajo individual, sigue las siguientes instrucciones:
reporte_lab9_A0MMMMMMM.txt
, en donde A0MMMMMMM
corresponde a tu matrícula. A partir del código fuente de AsciiDoc debes generar el archivo HTML correspondiente. Dicho archivo se debe llamar reporte_lab9_A0MMMMMMM.html
. Coloca ambos archivos dentro del directorio lab9
.
lab9
. Nombra a este archivo lab9.tgz
. Este archivo se puede crear desde la línea de comando tecleando lo siguiente (asegúrate que te encuentres en el mismo nivel que el directorio lab9
):
tar czf lab9.tgz lab9
Fecha límite: Martes, Marzo 27.
Esta actividad será evaluada usando los siguientes criterios:
50% | Implementación de los requerimientos. |
---|---|
50% | Reporte de la práctica de laboratorio. |
DA | El programa y/o reporte es un plagio. |