Prefacio

Este trabajo se ha traducido utilizando IA. Agradecemos tus opiniones y comentarios: translation-feedback@oreilly.com

Flask se distingue de otros frameworks porque permite a los desarrolladores tomar el asiento del conductor y tener pleno control creativo de sus aplicaciones. Quizá hayas oído alguna vez la frase "luchar contra el framework". Esto ocurre con la mayoría de los frameworks cuando decides resolver un problema con una solución que no es la oficial. Puede ser que quieras utilizar un motor de base de datos diferente, o tal vez un método distinto de autenticar a los usuarios. Desviarte del camino marcado por los desarrolladores del framework te dará muchos quebraderos de cabeza.

Flask no es así. ¿Te gustan las bases de datos relacionales? Genial. Flask las soporta todas. ¿Quizá prefieres una base de datos NoSQL? No hay ningún problema. Flask también funciona con ellas. ¿Quieres usar tu propio motor de base de datos? ¿No necesitas ninguna base de datos? También. Con Flask puedes elegir los componentes de tu aplicación, o incluso escribir los tuyos propios si eso es lo que quieres. ¡Sin preguntas!

La clave de esta libertad es que Flask se diseñó desde el principio para ser ampliado. Viene con un núcleo robusto que incluye la funcionalidad básica que necesitan todas las aplicaciones web y espera que el resto lo proporcionen algunas de las muchas extensiones de terceros del ecosistema... y, por supuesto, tú.

En este libro presento mi flujo de trabajo para desarrollar aplicaciones web con Flask. No pretendo que ésta sea la única forma verdadera de crear aplicaciones con este framework. Debes tomar mis opciones como recomendaciones y no como el evangelio.

La mayoría de los libros de desarrollo de software proporcionan ejemplos de código pequeños y centrados que demuestran las diferentes características de la tecnología de destino de forma aislada, dejando que el lector descubra el código "pegamento" necesario para transformar estas diferentes características en una aplicación que funcione plenamente. Yo adopto un enfoque completamente distinto. Todos los ejemplos que presento forman parte de una única aplicación que comienza siendo muy sencilla y se amplía en cada capítulo sucesivo. Esta aplicación comienza su vida con sólo unas pocas líneas de código y termina como una aplicación de blogs y redes sociales muy bien dotada.

A quién va dirigido este libro

Deberías tener cierto nivel de experiencia en codificación Python para aprovechar al máximo este libro. Aunque el libro no asume ningún conocimiento previo de Flask, se supone que se entienden bien conceptos de Python como paquetes, módulos, funciones, decoradores y programación orientada a objetos. Será muy útil cierta familiaridad con las excepciones y el diagnóstico de problemas a partir de los rastros de pila.

Mientras trabajes con los ejemplos de este libro, pasarás mucho tiempo en la línea de comandos. Debes sentirte cómodo utilizando la línea de comandos de tu sistema operativo.

Las aplicaciones web modernas no pueden evitar el uso de HTML, CSS y JavaScript. La aplicación de ejemplo que se desarrolla a lo largo del libro obviamente hace uso de ellos, pero el libro en sí no entra en muchos detalles sobre estas tecnologías y cómo se utilizan. Se recomienda cierto grado de familiaridad con estos lenguajes si pretendes desarrollar aplicaciones completas sin la ayuda de un desarrollador versado en técnicas del lado del cliente.

He publicado la aplicación que acompaña a este libro como código abierto en GitHub. Aunque GitHub permite descargar aplicaciones como archivos ZIP o TAR normales, te recomiendo encarecidamente que instales un cliente Git y te familiarices con el control de versiones del código fuente (al menos con los comandos básicos para clonar y comprobar las distintas versiones de la aplicación directamente desde el repositorio). La breve lista de comandos que necesitarás se muestra en "Cómo trabajar con el código de ejemplo". También querrás utilizar el control de versiones para tus propios proyectos, ¡así que utiliza este libro como excusa para aprender Git!

Por último, este libro no es una referencia completa y exhaustiva sobre el framework Flask. Se cubren la mayoría de las funciones, pero deberías complementar este libro con la documentación oficial de Flask.

Cómo está organizado este libro

Este libro está dividido en tres partes.

La Parte I, Introducción a Flask, explora los fundamentos del desarrollo de aplicaciones web con el framework Flask y algunas de sus extensiones:

Parte II, Ejemplo: Una aplicación de blogs sociales, construye Flasky, la aplicación de blogs y redes sociales de código abierto que desarrollé para este libro:

La Parte III, La última milla, describe algunas tareas importantes no directamente relacionadas con la codificación de la aplicación que hay que tener en cuenta antes de publicar una aplicación:

  • Enel capítulo 15 se describen con detalle distintas estrategias de pruebas unitarias.

  • El capítulo 16 ofrece una visión general de las técnicas de análisis del rendimiento.

  • El Capítulo 17 describe las opciones de implementación de las aplicaciones Flask, incluidas las soluciones tradicionales, las basadas en la nube y las basadas en contenedores.

  • Enel capítulo 18 se enumeran recursos adicionales.

Cómo trabajar con el código de ejemplo

Los ejemplos de código presentados en este libro están disponibles para su descarga en https://github.com/miguelgrinberg/flasky.

El historial de commits de este repositorio se creó cuidadosamente para que coincidiera con el orden en que se presentan los conceptos en el libro. La forma recomendada de trabajar con el código es consultar las confirmaciones empezando por la más antigua, y luego avanzar por la lista de confirmaciones a medida que progresas con el libro. Como alternativa, GitHub también te permitirá descargar cada commit como archivo ZIP o TAR.

Si decides utilizar Git para trabajar con el código fuente, entonces necesitas instalar el cliente Git, que puedes descargar de http://git-scm.com. El siguiente comando descarga el código de ejemplo utilizando Git:

$ git clone https://github.com/miguelgrinberg/flasky.git

El comando git clone instala el código fuente desde GitHub en una carpeta flasky2 que se crea en el directorio actual. Esta carpeta no contiene sólo el código fuente; también se incluye una copia del repositorio Git con todo el historial de cambios realizados en la aplicación.

En el primer capítulo se te pedirá que revises la versión inicial de la aplicación, y luego, en los lugares adecuados, se te indicará que avances en el historial. El comando Git que te permite moverte por el historial de cambios es git checkout. He aquí un ejemplo:

$ git checkout 1a

El 1a al que se hace referencia en el comando es una etiqueta: un punto con nombre en el historial de confirmaciones del proyecto. Este repositorio está etiquetado según los capítulos del libro, por lo que la etiqueta 1a utilizada en el ejemplo establece los archivos de la aplicación en la versión inicial utilizada en el Capítulo 1. La mayoría de los capítulos tienen más de una etiqueta asociada, así que, por ejemplo, las etiquetas 5a, 5b, etc. son versiones incrementales presentadas en el Capítulo 5.

Cuando ejecutes un comando git checkout como el que acabamos de mostrar, Git mostrará un mensaje de advertencia que te informará de que te encuentras en un estado "HEAD desvinculado". Esto significa que no estás en ninguna rama de código específica que pueda aceptar nuevas confirmaciones, sino que estás viendo una confirmación concreta en medio del historial de cambios del proyecto. No hay razón para alarmarse por este mensaje, pero debes tener en cuenta que si haces modificaciones en algún archivo mientras estás en este estado, emitir otro git checkout va a fallar, porque Git no sabrá qué hacer con los cambios que has hecho. Así que, para poder seguir trabajando con el proyecto, tendrás que revertir los archivos que hayas modificado a su estado original. La forma más sencilla de hacerlo es con el comando git reset:

$ git reset --hard

Este comando destruirá cualquier cambio local que hayas realizado, por lo que debes guardar cualquier cosa que no quieras perder antes de utilizar este comando.

Además de comprobar los archivos fuente de una versión de la aplicación, en determinados momentos tendrás que realizar tareas de configuración adicionales. Por ejemplo, en algunos casos tendrás que instalar nuevos paquetes de Python, o aplicar actualizaciones a la base de datos. Se te indicará cuándo son necesarias.

De vez en cuando, puede que quieras actualizar tu repositorio local desde el de GitHub, donde pueden haberse aplicado correcciones de errores y mejoras. Los comandos que consiguen esto son:

$ git fetch --all
$ git fetch --tags
$ git reset --hard origin/master

Los comandos git fetch se utilizan para actualizar el historial de confirmaciones y las etiquetas de tu repositorio local desde el remoto en GitHub, pero nada de esto afecta a los archivos fuente reales, que se actualizan con el comando git reset que viene a continuación. Una vez más, ten en cuenta que cada vez que se utilice git reset perderás cualquier cambio local que hayas realizado.

Otra operación útil es ver todas las diferencias entre dos versiones de la aplicación. Esto puede ser muy útil para comprender un cambio en detalle. Desde la línea de comandos, el comando git diff puede hacer esto. Por ejemplo, para ver la diferencia entre las revisiones 2a y 2b, utiliza:

$ git diff 2a 2b

Las diferencias se muestran como un parche, que no es un formato muy intuitivo para revisar los cambios si no estás acostumbrado a trabajar con archivos de parches. Puede que las comparaciones gráficas que muestra GitHub te resulten mucho más fáciles de leer. Por ejemplo, las diferencias entre las revisiones 2a y 2b pueden verse en GitHub en https://github.com/miguelgrinberg/flasky/compare/2a...2b.

Utilizar ejemplos de código

Este libro está aquí para ayudarte a hacer tu trabajo. En general, si se ofrece código de ejemplo con este libro, puedes utilizarlo en tus programas y documentación. No es necesario que te pongas en contacto con nosotros para pedirnos permiso, a menos que estés reproduciendo una parte importante del código. Por ejemplo, escribir un programa que utilice varios trozos de código de este libro no requiere permiso. Vender o distribuir un CD-ROM de ejemplos de los libros de O'Reilly sí requiere permiso. Responder a una pregunta citando este libro y el código de ejemplo no requiere permiso. Incorporar una cantidad significativa de código de ejemplo de este libro en la documentación de tu producto sí requiere permiso.

Agradecemos, pero no exigimos, la atribución. Una atribución suele incluir el título, el autor, la editorial y el ISBN. Por ejemplo "Flask Web Development, 2ª Edición, por Miguel Grinberg (O'Reilly). Copyright 2018 Miguel Grinberg, 978-1-491-99173-2".

Si crees que el uso que haces de los ejemplos de código no se ajusta al uso legítimo o al permiso concedido anteriormente, no dudes en ponerte en contacto con nosotros en

Convenciones utilizadas en este libro

En este libro se utilizan las siguientes convenciones tipográficas:

Cursiva

Indica nuevos términos, URL, direcciones de correo electrónico, nombres de archivo y extensiones de archivo.

Constant width

Se utiliza para la salida de la línea de comandos y los listados de programas, así como dentro de los párrafos para referirse a comandos y a elementos del programa como nombres de variables o funciones, bases de datos, tipos de datos, variables de entorno, sentencias y palabras clave.

Constant width bold

Muestra comandos u otros textos que deben ser tecleados literalmente por el usuario.

Constant width italic o corchetes angulares (<>)

Indica el texto que debe sustituirse por valores proporcionados por el usuario o por valores determinados por el contexto.

Consejo

Este elemento significa un consejo o sugerencia.

Nota

Este elemento significa una nota general.

Advertencia

Este elemento indica una advertencia o precaución.

Safari O'Reilly

Nota

Safari (antes Safari Books Online) es una plataforma de formación y referencia basada en membresías para empresas, administraciones públicas, educadores y particulares.

Los miembros tienen acceso a miles de libros, vídeos de formación, rutas de aprendizaje, tutoriales interactivos y listas de reproducción de más de 250 editoriales, como O'Reilly Media, Harvard Business Review, Prentice Hall Professional, Addison-Wesley Professional, Microsoft Press, Sams, Que, Peachpit Press, Adobe, Focal Press, Cisco Press, John Wiley & Sons, Syngress, Morgan Kaufmann, IBM Redbooks, Packt, Adobe Press, FT Press, Apress, Manning, New Riders, Jones & Bartlett y Course Technology, entre otras. Sons, Syngress, Morgan Kaufmann, IBM Redbooks, Packt, Adobe Press, FT Press, Apress, Manning, New Riders, McGraw-Hill, Jones & Bartlett y Course Technology, entre otras.

Para más información, visita http://oreilly.com/safari.

Cómo contactar con nosotros

Dirige tus comentarios y preguntas sobre este libro a la editorial:

  • O'Reilly Media, Inc.
  • 1005 Gravenstein Highway Norte
  • Sebastopol, CA 95472
  • 800-998-9938 (en Estados Unidos o Canadá)
  • 707-829-0515 (internacional o local)
  • 707-829-0104 (fax)

Tenemos una página web para este libro, donde se enumeran erratas, ejemplos y cualquier información adicional. Puedes acceder a esta página en http://bit.ly/flask-web-dev2.

Para hacer comentarios o preguntas técnicas sobre este libro, envía un correo electrónico a

Para más información sobre nuestros libros, cursos, conferencias y noticias, consulta nuestro sitio web en http://www.oreilly.com.

Encuéntranos en Facebook: http://facebook.com/oreilly

Síguenos en Twitter: http://twitter.com/oreillymedia

Míranos en YouTube: http://www.youtube.com/oreillymedia

Agradecimientos

No podría haber escrito este libro sola. He recibido mucha ayuda de mi familia, compañeros de trabajo, viejos amigos y nuevos amigos que he hecho por el camino.

Me gustaría dar las gracias a Brendan Kohler por su detallada revisión técnica y por su ayuda para dar forma al capítulo sobre interfaces de programación de aplicaciones. También estoy en deuda con David Baumgold, Todd Brunhoff, Cecil Rock y Matthew Hugues, que revisaron el manuscrito en distintas fases de elaboración y me dieron consejos muy útiles sobre qué tratar y cómo organizar el material.

Escribir los ejemplos de código para este libro supuso un esfuerzo considerable. Agradezco la ayuda de Daniel Hofmann, que hizo una revisión exhaustiva del código de la aplicación y señaló varias mejoras. También estoy agradecido a mi hijo adolescente, Dylan Grinberg, que suspendió su adicción a Minecraft durante unos fines de semana y me ayudó a probar el código en varias plataformas.

O'Reilly tiene un maravilloso programa llamado Early Release que permite a los lectores impacientes acceder a los libros mientras se están escribiendo. Algunos de mis lectores de Publicación Anticipada hicieron un esfuerzo adicional y participaron en conversaciones útiles sobre su experiencia con el libro, lo que dio lugar a mejoras significativas. Me gustaría agradecer especialmente a Sundeep Gupta, Dan Caron, Brian Wisti y Cody Scott sus contribuciones a este libro.

El personal de O'Reilly Media siempre ha estado ahí para mí. Sobre todo me gustaría reconocer a mi maravillosa editora, Meghan Blanchette, por su apoyo, consejo y ayuda desde el primer día que nos conocimos. Meg hizo que la experiencia de escribir mi primer libro fuera memorable.

Para terminar, me gustaría dar las gracias a la impresionante comunidad de Flask.

Agradecimientos adicionales por la Segunda Edición

Me gustaría dar las gracias a Ally MacDonald, mi editora para la segunda edición de este libro, y también a Susan Conant, Rachel Roumeliotis y a todo el equipo de O'Reilly Media por su continuo apoyo.

Los revisores técnicos de esta edición hicieron un magnífico trabajo señalando áreas que mejorar y aportándome nuevas perspectivas. Me gustaría agradecer a Lorena Mesa, Diane Chen y Jesse Smith su gran contribución a través de sus comentarios y sugerencias. También agradezco enormemente la ayuda de mi hijo, Dylan Grinberg, que probó concienzudamente todos los ejemplos de código.

Get Desarrollo Web con Flask, 2ª Edición now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.