¿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.