El libro de Django 1.0

11.1. Lo básico: Vistas y tipos MIME

¿Recuerdas esto del Capítulo 3?

Una función vista, o una vista por abreviar, es simplemente una función en Python que recibe una petición Web y retorna una respuesta Web. Esta respuesta puede ser el contenido HTML de una página Web, una redirección, un error 404, un documento XML, una imagen... en realidad, cualquier cosa.

Más formalmente, una función vista Django debe

  • Aceptar una instancia HttpRequest como primer argumento.
  • Retornar una instancia HttpResponse.

La clave para retornar contenido no HTML desde una vista reside en la clase HttpResponse, específicamente en el argumento mimetype del constructor. Cambiando el tipo MIME, podemos indicarle al navegador que hemos retornado una respuesta en un formato diferente.

Por ejemplo, veamos una vista que devuelve una imagen PNG. Para mantener las cosas sencillas, simplemente leeremos un fichero desde el disco:

from django.http import HttpResponse

def my_image(request):
    image_data = open("/path/to/my/image.png", "rb").read()
    return HttpResponse(image_data, mimetype="image/png")

¡Eso es todo! Si sustituimos la ruta de la imagen en la llamada a open() con la ruta a una imagen real, podemos usar esta vista bastante sencilla para servir una imagen, y el navegador la mostrará correctamente.

La otra cosa importante a tener presente es que los objetos HttpResponse implementan el API estándar de Python para ficheros. Esto significa que podemos usar una instancia de HttpResponse en cualquier lugar donde Python (o librería de terceros) espera un fichero.

Como un ejemplo de cómo funciona esto, veamos la producción de CSV con Django.