Estás en:   ArielOrtiz.com > Desarrollo de aplicaciones distribuidas > Laboratorio 9: Middleware en Django

Laboratorio 9: Middleware en Django

Objetivos

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.

Descripción de la actividad

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.

Instrucciones preliminares

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.

Problema

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:

Un elefante en arte ASCII.

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):

El mismo elefante en arte ASCII, pero sobre papel stock

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.

¿Qué se debe entregar?

Para entregar tu trabajo individual, sigue las siguientes instrucciones:

Fecha límite: Martes, Marzo 27.

Evaluación

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.