Capítulo 1. Instalación, primera aplicación Flask y organización de plantillas

Instalamos Python y Visual Studio Code. Aprendemos a crear entornos virtuales y creamos nuestra primera aplicación Flask.
Comenzamos a reorganizar la estructura de nuestra aplicación. Para hacerlo, procedemos en dos pasos. Primero, organizamos todos nuestros archivos HTML en una carpeta de plantillas y accedemos a ellos desde nuestro archivo application.py. Segundo, para evitar repeticiones en el código de los archivos HTML, introducimos plantillas. Estos dos pasos nos ayudarán a hacer nuestro código más eficiente y accesible. Concluimos el capítulo con el desafío semanal, donde introducimos un menú de navegación para navegar a las páginas de inicio, metodología y la aplicación light-talk.

Instalación

¿Qué es Python? Resumen Ejecutivo

Python es un lenguaje de programación interpretado, orientado a objetos y de alto nivel con semántica dinámica. Sus estructuras de datos integradas de alto nivel, combinadas con la tipificación dinámica y el enlace dinámico, lo hacen muy atractivo para el desarrollo rápido de aplicaciones, así como para su uso como un lenguaje de scripting o de conexión para integrar componentes existentes. La sintaxis simple y fácil de aprender de Python enfatiza la legibilidad y, por lo tanto, reduce el costo de mantenimiento de los programas. Python admite módulos y paquetes, lo que fomenta la modularidad del programa y la reutilización del código. El intérprete de Python y la extensa biblioteca estándar están disponibles en forma de código fuente o binario sin costo para todas las principales plataformas, y pueden ser distribuidos libremente.

Más información sobre Python:

Instalar Python:

Mira el video de YouTube proporcionado en el encabezado:

Editores de Código

Para desarrollar nuestra aplicación, necesitamos escribir código. Hay muchos editores de código. Usaremos uno de los editores de código más populares: Visual Studio Code. Otros editores que he utilizado en mis clases son PyCharm y Sublime Text.

¿Qué es Visual Studio Code?

Visual Studio Code, comúnmente referido como VS Code, es un editor de código fuente creado por Microsoft con el framework Electron, para Windows, Linux y macOS. Sus características incluyen soporte para depuración, resaltado de sintaxis, autocompletado inteligente, fragmentos de código, refactorización de código y Git integrado. Los usuarios pueden cambiar el tema, los atajos de teclado, las preferencias, e instalar extensiones que añaden funcionalidad adicional.

Más información sobre Visual Studio Code:

Más información sobre PyCharm: Más información sobre Sublime Text:

Instalar Visual Studio Code:

Mira el video de YouTube proporcionado en el encabezado:

Nuestra Primera Aplicación Flask

¿Qué es Flask?

Flask es un framework web micro escrito en Python. Se clasifica como un microframework porque no requiere herramientas o bibliotecas particulares. No tiene una capa de abstracción de base de datos, validación de formularios, ni otros componentes donde las bibliotecas de terceros preexistentes proporcionan funciones comunes. Sin embargo, Flask admite extensiones que pueden agregar características a la aplicación como si estuvieran implementadas en Flask mismo. Existen extensiones para mapeadores objeto-relacionales, validación de formularios, manejo de archivos cargados, varias tecnologías de autenticación abierta y varias herramientas comunes relacionadas con el framework.

¿Qué es un Framework Web?

Un Framework de Aplicación Web o simplemente un Framework Web representa una colección de bibliotecas y módulos que permiten a los desarrolladores de aplicaciones web escribir aplicaciones sin preocuparse por detalles de bajo nivel como el protocolo, la gestión de hilos, y demás.

Más información sobre Flask:

Nuestra Primera Aplicación Flask:

Un video con el resumen de todos los pasos está en el canal de YouTube del curso. El código de la aplicación está en el repositorio de GitHub del curso.

  1. Crear un entorno virtual. Un entorno virtual funciona como una caja de herramientas donde puedes almacenar todas las herramientas necesarias para ejecutar tu aplicación. Cuando añadamos más estructura y funcionalidades a nuestra aplicación, necesitaremos más herramientas que almacenaremos en nuestro entorno virtual. Cuando despleguemos nuestra aplicación en el servidor, le daremos al servidor la lista de herramientas almacenadas en nuestro entorno virtual, para que pueda ejecutar nuestra aplicación.

    Una definición formal de un entorno virtual en Python: Para crear un entorno virtual, abre una terminal en VS Code y escribe:
      En Windows: (python -m venv venv) o (python3 -m venv venv) dependiendo de la versión de Python instalada en tu computadora.
      En Mac es necesario seguir dos pasos: Primero, es necesario instalar un paquete llamado virtualenv escribiendo en la línea de comandos de VS Code (pip install virtualenv). Segundo, es necesario crear el entorno virtual escribiendo en la línea de comandos de VS Code (virtualenv venv).

  2. En VS Code, abre la terminal y activa el entorno virtual.
      En Windows: (venv\Scripts\activate).
      En Mac: (source venv/bin/activate).

  3. Usando la terminal en VS Code, instala flask: (pip install flask) (o pip3 install flask). El comando pip (o pip3) depende de la versión de Python instalada en tu computadora. Prueba ambos.

  4. Usando la terminal en VS Code, escribe el código de tu aplicación, y guarda ese archivo como application.py.

  5. Usando la terminal en VS Code, ejecuta tu aplicación: (python application.py) (o python3 application.py). El comando python (o python3) depende de la versión de Python instalada en tu computadora. Prueba ambos.

  6. Abre la aplicación en tu navegador: Abre el enlace azul que aparece en VS Code después de ejecutar tu archivo application.py para abrir tu aplicación en el navegador.

El código de nuestra primera aplicación Flask (versión extendida):


        from flask import Flask
        application = Flask(__name__)
        
        @application.route('/')
        @application.route('/home')
        def home():
            return "<h1>Página de inicio</h1>" \
                "<p>En este proyecto desarrollamos 
                una aplicación...</p>"
        
        @application.route('/desarrolladores')
        def developers():
            return "<h1>Desarrolladores</h1>" \
                "<p>En esta página web, presentamos 
                a los desarrolladores de la aplicación...</p>"
        
        @application.route('/light_talk_app')
        def app_calculator():
            return "<h1>Calculadora de Aplicaciones</h1>" \
                "<p>En esta página web, desarrollamos una 
                aplicación para el aprendizaje del español...</p>"
        
        if __name__ == '__main__':
            application.run(debug=True)
        

Carpeta de Plantillas

En nuestra primera aplicación, todo el código está en un solo archivo (application.py). Esa no es la mejor manera de organizar el código, ya que cuando introducimos más código en nuestra aplicación, es muy difícil organizar el código en un solo archivo. Dentro del desarrollo de nuestra aplicación, modificaremos la estructura para hacer el código más eficiente y claro.

Moviendo el código HTML a una Carpeta de Plantillas:

El video con todos los pasos de esta sección y el código se pueden encontrar en los enlaces de YouTube y GitHub a continuación:

  1. En tu computadora, crea una carpeta llamada “Sección 3” (o el nombre que elijas). Dentro de esa carpeta, crea una carpeta llamada “templates” (templates es el nombre estándar para la carpeta de plantillas, te sugiero que uses ese nombre).

  2. En la carpeta templates, crea un archivo llamado “home.html”. En ese archivo, escribe el código que aparece en el cuadro de la derecha.

  3. Una vez que hayas creado tu archivo “home.html”, debes llamarlo desde tu archivo application.py. Para hacer eso, es necesario hacer dos cosas (ver el código en el cuadro de la derecha):

    1. Necesitamos importar la función render_template del paquete flask.
    2. Usando la función render_template, llamamos al archivo home.html.
    3. Opcionalmente, podemos pasar información desde nuestro archivo application.py a nuestros archivos HTML. En particular, en este caso vamos a pasar un título para nuestro archivo home.html. En el archivo application.py debemos pasar el título (ver el código en el cuadro de la derecha), y en el archivo home.html, tenemos que mostrar el título colocándolo entre dos corchetes (ver código en el cuadro de la derecha).

  4. Una vez que hayas modificado el archivo application.py y hayas creado una carpeta templates, debes crear tu entorno virtual e instalar Flask en él. Tenemos dos opciones. Primero, copiar y pegar el entorno virtual que creamos en la segunda sección de este capítulo. Segundo, seguir todos los pasos descritos en la segunda sección de este capítulo para crear un nuevo entorno virtual, activarlo e instalar Flask.

  5. Con el entorno virtual activado, ejecuta tu aplicación escribiendo: python application.py y ábrelo en el servidor local de tu computadora.

El código en el archivo home.html:


    <!DOCTYPE html>
    <html>
    <head>    
        <title>{{title}}</title>
    </head>
    <body>
        <h1>Inicio</h1>
        <p>
            Nuestra app de aprendizaje del español light-talk....
        </p>
        <p>
        Desarrolladores:
        <ul>
            <li>
                Desarrollador 1: Breve biografía. Enlace al CV.
            </li>
        </ul>
        </p>
    </body>
    </html>
    

El código en el archivo application.py:


    from flask import Flask, render_template
    application = Flask(__name__)
    
    @application.route('/')
    @application.route('/home')
    def home():
        return render_template('home.html', title='home')
    
    if __name__ == '__main__':
        application.run(debug=True)
    

Agregar enlaces a páginas dentro de nuestra aplicación (url_for):

Hasta ahora, para acceder a nuestras páginas web, necesitamos introducir manualmente las rutas en el navegador. Eso no es muy práctico. En el desafío semanal, introduciremos un menú de navegación para acceder a las páginas de inicio, metodología y light-talk app. En esta sección, vamos a explicar cómo introducir un enlace a una ruta dentro de nuestra aplicación Flask.

Para acceder a rutas en nuestra aplicación Flask, utilizaremos la función url_for de Flask. La función url_for se define como una función que permite a los desarrolladores construir y generar URLs en una aplicación Flask. La forma de usar url_for en nuestra aplicación Flask es muy simple. En esta sección, utilizaremos url_for en un enlace. Más adelante en el curso, la usaremos en otras situaciones.

En el archivo home.html, vamos a crear un enlace a las páginas de metodología y calculadora de carbono. Para hacerlo, escribimos (ver código en el cuadro de la derecha):

    (<a href="{{ url_for('business') }}">enlace</a>)
                    

El código en el archivo home.html:


        <p>
            El objetivo de nuestra app es enseñar español. 
            Para ello desarrollamos un modelo de negocio
            (<a href="{{ url_for('business') }}">enlace</a>) para 
            enseñar a nuestras estudiantes español.
        </p>
    
    

Plantillas

Plantillas de Flask y Jinja2

Como se puede observar en la carpeta de plantillas en la sección anterior, todos los archivos html tienen la misma estructura. Cada archivo comienza con html, luego el head y luego el body. Esa no es una forma eficiente de escribir código porque hay partes del código que se repiten en cada archivo. Podemos evitar esa repetición utilizando plantillas.

Flask aprovecha Jinja2 como su motor de plantillas. Obviamente, eres libre de usar un motor de plantillas diferente, pero aún así debes instalar Jinja2 para ejecutar Flask. Para verificar que ya tienes instalado Jinja2, puedes abrir tu archivo requirements.txt, y allí podrás ver que cuando instalas Flask, también se instala Jinja2 por defecto.

Una plantilla Jinja es simplemente un archivo de texto. Jinja puede generar cualquier formato basado en texto (HTML, XML, CSV, LaTeX, etc.). Una plantilla Jinja no necesita tener una extensión específica: .html, .xml o cualquier otra extensión está bien.

Una plantilla contiene variables y/o expresiones, que se reemplazan con valores cuando se renderiza una plantilla; y etiquetas, que controlan la lógica de la plantilla. La sintaxis de la plantilla está muy inspirada en Django y Python.

Ya hemos utilizado Jinja2 en la sección anterior cuando pasamos el título de nuestra página web desde el archivo application.py al archivo home.html utilizando .

Más información sobre Plantillas Flask y Jinja2:

Plantillas de Flask y Jinja2 en acción:

El video con todos los pasos en esta sección, y el código, se pueden encontrar en los enlaces de YouTube y GitHub a continuación:

Usaremos Jinja2 dentro de nuestro proyecto varias veces. En esta sección, lo usaremos para hacer nuestro código más eficiente e introducir algunas declaraciones lógicas en nuestro código.

  1. Creamos un archivo layout.html donde presentamos la estructura html básica de nuestro archivo. En ese archivo, introducimos dos elementos de Jinja2.

    1. En el head del archivo layout.html, introducimos una declaración lógica para revelar el título de cada una de las páginas web en nuestra aplicación (ver código en el recuadro derecho).
    2. En el body del archivo layout.html, introducimos una declaración para introducir bloques de código html en nuestro archivo layout.html. Esto nos ayudará a heredar el código de layout.html evitando escribir el mismo código una y otra vez en cada archivo html (ver código en el recuadro derecho).

  2. Para usar el archivo layout.html, necesitamos modificar el resto de los archivos html. Para hacer posible esa comunicación, en los archivos html, necesitamos introducir dos cambios.

    1. Para usar el archivo layout.html dentro de nuestros archivos html, necesitamos extenderlo (ver código en el recuadro derecho).
    2. Dentro de nuestros archivos html, necesitamos definir los bloques html que se insertarán en el archivo layout.html (ver código en el recuadro derecho).

El código del archivo layout.html:


    <!DOCTYPE html>
    <html>
        <head>
            {% if title %}
                <title>{{ title }}</title>
            {% else %}
                <title>home</title>
            {% endif %}
        </head>
        <body>
            {% block content %} {% endblock %}
        </body>
    </html>
    

El código del archivo home.html:


    {% extends "layout.html" %}
    {% block content %}
            <h1>Inicio</hses1>
            <p>
                El estudio del español ...
            </p>           
            <p>
                Desarrolladores:
                <ul>
                    <li>
                        <strong>Desarrollador 1</strong>: Breve biografía. Enlace al CV.
                    </li>
                </ul>
            </p>
    {% endblock content %}
    

Reto Semanal

Hasta ahora, para navegar hacia la página de inicio, la del modelo de negocio y la aplicación light-talk, necesitamos cambiar las rutas manualmente en el navegador. Esto hace que la navegación sea muy difícil.

En este desafío semanal, introduciremos un menú de navegación para acceder a todas las páginas web. Queremos que el menú de navegación aparezca en todas las páginas web. Además, si queremos introducir una nueva pestaña en nuestro menú de navegación, queremos que aparezca en todas las páginas web, y no queremos hacerlo cambiando cada página individualmente. Por lo tanto, utilizaremos plantillas y, en particular, introduciremos el menú de navegación en el archivo layout.html, de modo que las demás páginas web hereden el menú de navegación.

Discutiremos el desafío semanal el viernes ..... Utilizaremos el chat principal para ayudarnos mutuamente en el desafío semanal. Dentro de esos días, por favor comparte tu código de ruta del modelo de negocio con el resto de los grupos usando el chat principal, para que podamos aprender unos de otros.

Compartiré mi solución personal para el desafío semanal en el enlace de GitHub a continuación después de la clase el viernes....