Introducción a Flask
¿Qué es Flask?
Creando tu primer "Hello, World" en Flask
Rutas y Plantillas con Jinja
Rutas y vistas en Flask
Plantillas con Jinja en Flask
Manejo de Formularios y Datos
Manejo de formularios en Flask
Bases de datos: SQLite y SQLAlchemy
CRUD: Crear y leer datos en Flask
CRUD: Actualizar datos en Flask
CRUD: Eliminar datos en Flask
Organización del Proyecto y Mejoras
Estructura de proyectos en Flask
Blueprints en Flask
Notificaciones con Flash Messages
Integración de TailwindCSS en Flask
Seguridad y Testing
Gestión de sesiones en Flask
Manejo de cierre de sesión en Flask
Validación de formularios en Flask
Pruebas unitarias en Flask
Próximos pasos en Flask
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
La organización de aplicaciones Flask a gran escala es fundamental para mantener un código limpio y escalable. Los blueprints son una herramienta poderosa que nos permite estructurar nuestras aplicaciones de manera modular, agrupando rutas y funcionalidades relacionadas. Esta técnica no solo mejora la legibilidad del código, sino que también facilita el mantenimiento y la colaboración en proyectos de mayor envergadura.
Los blueprints en Flask son una forma de organizar aplicaciones a gran escala, permitiéndonos agrupar endpoints o URLs de acuerdo a su dominio o funcionalidad. Esta modularización facilita enormemente el mantenimiento del código y permite una mejor separación de responsabilidades dentro de nuestra aplicación.
Cuando trabajamos con aplicaciones Flask que crecen en complejidad, mantener todas las rutas en un solo archivo se vuelve inmanejable. Los blueprints nos permiten:
Antes de implementar nuestros blueprints, debemos resolver un error común: tener múltiples instancias de SQLAlchemy en nuestra aplicación. Este error se manifiesta con un mensaje que nos pregunta si olvidamos hacer el init_app
.
El problema ocurre porque estamos instanciando la base de datos en dos lugares diferentes:
# En models.py
db = SQLAlchemy()
# En app.py
db = SQLAlchemy(app)
La solución es mantener una única instancia de SQLAlchemy e inicializarla correctamente:
init_app
# En app.py
from models import db
# Más adelante en el código
db.init_app(app)
Con esto, SQLAlchemy sabrá a qué base de datos debe conectarse cuando realizamos operaciones como session.add()
.
Para implementar blueprints en nuestra aplicación Flask, seguiremos estos pasos:
Primero, creamos una nueva carpeta para nuestro blueprint y un archivo para las rutas:
/notes
/routes.py
En el archivo routes.py, importamos las dependencias necesarias y creamos nuestro blueprint:
from flask import Blueprint, render_template, request, redirect, url_for, flash
from models import Note, db
notes_bp = Blueprint('notes', __name__)
# Aquí irán nuestras rutas
Ahora movemos todas las rutas relacionadas con notas desde app.py a nuestro nuevo archivo routes.py, reemplazando app
por notes_bp
:
@notes_bp.route('/notes')
def list_notes():
notes = Note.query.all()
return render_template('notes.html', notes=notes)
@notes_bp.route('/notes/create', methods=['GET', 'POST'])
def create_note():
# Código para crear notas
En nuestro archivo app.py, importamos el blueprint y lo registramos:
from notes.routes import notes_bp
app.register_blueprint(notes_bp)
Uno de los cambios más importantes al usar blueprints es que los nombres de las rutas cambian. Ahora debemos prefijar el nombre del blueprint:
# Antes
url_for('create_note')
# Después
url_for('notes.create_note')
Debemos actualizar todas las referencias en nuestras plantillas y redirecciones:
# En redirecciones
return redirect(url_for('notes.list_notes'))
# En plantillas
<a href="{{ url_for('notes.edit_note', id=note.id) }}">Editar</a>
La implementación de blueprints en proyectos Flask ofrece numerosas ventajas:
Un caso común es crear un blueprint para la gestión de usuarios. Podríamos implementarlo así:
# En users/routes.py
from flask import Blueprint, render_template, request, redirect, url_for
from models import User, db
users_bp = Blueprint('users', __name__)
@users_bp.route('/login', methods=['GET', 'POST'])
def login():
# Lógica de inicio de sesión
return render_template('login.html')
@users_bp.route('/register', methods=['GET', 'POST'])
def register():
# Lógica de registro
return render_template('register.html')
Y luego registrarlo en nuestra aplicación principal:
from users.routes import users_bp
app.register_blueprint(users_bp)
Los blueprints son una herramienta esencial para cualquier desarrollador de Flask que trabaje en aplicaciones de mediana a gran escala. Dominar su implementación te permitirá crear aplicaciones más organizadas, mantenibles y escalables. ¿Has implementado blueprints en tus proyectos? ¡Comparte tu experiencia en los comentarios!
Aportes 1
Preguntas 0
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?