Flask es un microframework web para Python que permite a los desarrolladores construir aplicaciones web de manera rápida y sencilla. A diferencia de otros frameworks más grandes como Django, Flask es ligero y flexible, lo que lo hace ideal para proyectos pequeños y medianos. En esta sección, aprenderás los conceptos básicos de Flask, cómo configurar un proyecto y cómo crear tu primera aplicación web.
Contenido
Introducción a Flask
Flask es conocido por su simplicidad y facilidad de uso. Es un microframework porque no incluye muchas de las funcionalidades que otros frameworks más grandes tienen por defecto, como un ORM (Object-Relational Mapping) o un sistema de autenticación. Sin embargo, Flask es altamente extensible y permite agregar estas funcionalidades según sea necesario.
Características Principales de Flask:
- Ligero y Flexible: Permite a los desarrolladores elegir las herramientas y bibliotecas que necesitan.
- Extensible: Puedes agregar extensiones para funcionalidades adicionales.
- Simplicidad: Ideal para aprender y construir aplicaciones rápidamente.
Instalación de Flask
Para instalar Flask, necesitas tener Python y pip
(el gestor de paquetes de Python) instalados en tu sistema. Puedes instalar Flask utilizando el siguiente comando:
Estructura de un Proyecto Flask
Un proyecto Flask típico tiene una estructura simple. Aquí hay un ejemplo de cómo podría verse:
app.py
: El archivo principal de la aplicación.templates/
: Carpeta donde se almacenan las plantillas HTML.static/
: Carpeta para archivos estáticos como CSS, JavaScript e imágenes.
Creación de una Aplicación Básica
Vamos a crear una aplicación básica en Flask. Abre tu editor de texto favorito y crea un archivo llamado app.py
con el siguiente contenido:
from flask import Flask app = Flask(__name__) @app.route('/') def home(): return "¡Hola, Mundo!" if __name__ == '__main__': app.run(debug=True)
Explicación del Código:
from flask import Flask
: Importa la clase Flask del módulo flask.app = Flask(__name__)
: Crea una instancia de la clase Flask.@app.route('/')
: Define una ruta para la URL raíz (/
).def home()
: Define una función que se ejecutará cuando se acceda a la URL raíz.app.run(debug=True)
: Ejecuta la aplicación en modo de depuración.
Para ejecutar la aplicación, abre una terminal y navega hasta el directorio donde se encuentra app.py
, luego ejecuta:
Abre tu navegador web y ve a http://127.0.0.1:5000/
. Deberías ver el mensaje "¡Hola, Mundo!".
Rutas y Vistas
Las rutas en Flask se definen utilizando el decorador @app.route
. Cada ruta está asociada a una función que devuelve una respuesta. Aquí hay un ejemplo con múltiples rutas:
@app.route('/') def home(): return "¡Hola, Mundo!" @app.route('/about') def about(): return "Acerca de Nosotros"
Explicación del Código:
@app.route('/about')
: Define una ruta para la URL/about
.def about()
: Define una función que se ejecutará cuando se acceda a la URL/about
.
Plantillas con Jinja2
Flask utiliza Jinja2 como su motor de plantillas. Las plantillas permiten generar HTML dinámico. Crea un archivo llamado index.html
en la carpeta templates
con el siguiente contenido:
<!DOCTYPE html> <html lang="es"> <head> <meta charset="UTF-8"> <title>Mi Aplicación Flask</title> </head> <body> <h1>{{ mensaje }}</h1> </body> </html>
Luego, modifica app.py
para renderizar esta plantilla:
from flask import Flask, render_template app = Flask(__name__) @app.route('/') def home(): return render_template('index.html', mensaje="¡Hola, Mundo!") if __name__ == '__main__': app.run(debug=True)
Explicación del Código:
from flask import render_template
: Importa la funciónrender_template
para renderizar plantillas.return render_template('index.html', mensaje="¡Hola, Mundo!")
: Renderiza la plantillaindex.html
y pasa la variablemensaje
a la plantilla.
Ejercicio Práctico
Ejercicio:
- Crea una nueva ruta
/contact
que renderice una plantillacontact.html
. - En
contact.html
, muestra un formulario simple con campos para nombre y mensaje. - Modifica
app.py
para manejar la lógica de mostrar y procesar el formulario.
Solución:
contact.html
:
<!DOCTYPE html> <html lang="es"> <head> <meta charset="UTF-8"> <title>Contacto</title> </head> <body> <h1>Contacto</h1> <form method="post"> <label for="name">Nombre:</label> <input type="text" id="name" name="name"> <br> <label for="message">Mensaje:</label> <textarea id="message" name="message"></textarea> <br> <button type="submit">Enviar</button> </form> </body> </html>
app.py
:
from flask import Flask, render_template, request app = Flask(__name__) @app.route('/') def home(): return render_template('index.html', mensaje="¡Hola, Mundo!") @app.route('/contact', methods=['GET', 'POST']) def contact(): if request.method == 'POST': name = request.form['name'] message = request.form['message'] return f"Gracias, {name}. Hemos recibido tu mensaje: {message}" return render_template('contact.html') if __name__ == '__main__': app.run(debug=True)
Explicación del Código:
from flask import request
: Importa el objetorequest
para manejar datos de formularios.@app.route('/contact', methods=['GET', 'POST'])
: Define una ruta que acepta métodos GET y POST.if request.method == 'POST'
: Verifica si el método de la solicitud es POST.name = request.form['name']
: Obtiene el valor del camponame
del formulario.message = request.form['message']
: Obtiene el valor del campomessage
del formulario.
Conclusión
En esta sección, has aprendido los fundamentos del framework Flask, incluyendo cómo instalarlo, crear una aplicación básica, definir rutas y vistas, y trabajar con plantillas Jinja2. También has completado un ejercicio práctico para reforzar estos conceptos. En la próxima sección, profundizaremos en la construcción de APIs REST con Flask, lo que te permitirá crear aplicaciones web más complejas y funcionales.
Curso de Programación en Python
Módulo 1: Introducción a Python
- Introducción a Python
- Configuración del Entorno de Desarrollo
- Sintaxis de Python y Tipos de Datos Básicos
- Variables y Constantes
- Entrada y Salida Básica
Módulo 2: Estructuras de Control
- Sentencias Condicionales
- Bucles: for y while
- Herramientas de Control de Flujo
- Comprensiones de Listas
Módulo 3: Funciones y Módulos
- Definición de Funciones
- Argumentos de Función
- Funciones Lambda
- Módulos y Paquetes
- Visión General de la Biblioteca Estándar
Módulo 4: Estructuras de Datos
Módulo 5: Programación Orientada a Objetos
Módulo 6: Manejo de Archivos
- Lectura y Escritura de Archivos
- Trabajo con Archivos CSV
- Manejo de Datos JSON
- Operaciones de Archivos y Directorios
Módulo 7: Manejo de Errores y Excepciones
- Introducción a las Excepciones
- Manejo de Excepciones
- Lanzamiento de Excepciones
- Excepciones Personalizadas
Módulo 8: Temas Avanzados
- Decoradores
- Generadores
- Administradores de Contexto
- Concurrencia: Hilos y Procesos
- Asyncio para Programación Asíncrona
Módulo 9: Pruebas y Depuración
- Introducción a las Pruebas
- Pruebas Unitarias con unittest
- Desarrollo Guiado por Pruebas
- Técnicas de Depuración
- Uso de pdb para Depuración
Módulo 10: Desarrollo Web con Python
- Introducción al Desarrollo Web
- Fundamentos del Framework Flask
- Construcción de APIs REST con Flask
- Introducción a Django
- Construcción de Aplicaciones Web con Django
Módulo 11: Ciencia de Datos con Python
- Introducción a la Ciencia de Datos
- NumPy para Computación Numérica
- Pandas para Manipulación de Datos
- Matplotlib para Visualización de Datos
- Introducción al Aprendizaje Automático con scikit-learn