Introducción

En aplicaciones Flask pequeñas, es común tener todo el código en un solo archivo o en unos pocos archivos. Sin embargo, a medida que la aplicación crece, esta estructura puede volverse difícil de manejar. Aquí es donde los Blueprints entran en juego. Los Blueprints permiten dividir una aplicación Flask en componentes modulares y reutilizables, facilitando la organización y el mantenimiento del código.

¿Qué es un Blueprint?

Un Blueprint en Flask es una forma de organizar tu aplicación en módulos separados. Cada módulo puede tener sus propias rutas, vistas, plantillas y archivos estáticos. Los Blueprints permiten:

  • Modularizar la aplicación.
  • Reutilizar código en diferentes partes de la aplicación.
  • Facilitar la colaboración en equipos de desarrollo.

Creando un Blueprint

Paso 1: Definir el Blueprint

Primero, crea un nuevo archivo para tu Blueprint. Por ejemplo, si estás creando un módulo para la autenticación de usuarios, podrías crear un archivo auth.py en un directorio llamado blueprints.

# blueprints/auth.py
from flask import Blueprint

auth = Blueprint('auth', __name__)

@auth.route('/login')
def login():
    return "Login Page"

@auth.route('/logout')
def logout():
    return "Logout Page"

Paso 2: Registrar el Blueprint

Luego, registra el Blueprint en tu aplicación principal. Abre tu archivo principal de la aplicación (por ejemplo, app.py) y registra el Blueprint.

# app.py
from flask import Flask
from blueprints.auth import auth

app = Flask(__name__)
app.register_blueprint(auth, url_prefix='/auth')

if __name__ == '__main__':
    app.run(debug=True)

Explicación del Código

  • Definición del Blueprint: En blueprints/auth.py, se crea un Blueprint llamado auth. Las rutas /login y /logout se definen dentro de este Blueprint.
  • Registro del Blueprint: En app.py, se importa y registra el Blueprint auth con el prefijo de URL /auth. Esto significa que las rutas definidas en el Blueprint estarán disponibles bajo el prefijo /auth (por ejemplo, /auth/login y /auth/logout).

Estructura de Directorios

Una estructura de directorios típica para una aplicación Flask que utiliza Blueprints podría verse así:

my_flask_app/
│
├── app.py
├── blueprints/
│   ├── __init__.py
│   ├── auth.py
│   └── other_blueprint.py
├── templates/
│   ├── auth/
│   │   ├── login.html
│   │   └── logout.html
│   └── other_blueprint/
│       └── some_template.html
└── static/
    ├── css/
    ├── js/
    └── images/

Ejemplo Práctico

Vamos a crear un ejemplo práctico donde utilizamos Blueprints para organizar una aplicación con módulos de autenticación y blog.

Paso 1: Crear los Blueprints

auth.py

# blueprints/auth.py
from flask import Blueprint, render_template

auth = Blueprint('auth', __name__)

@auth.route('/login')
def login():
    return render_template('auth/login.html')

@auth.route('/logout')
def logout():
    return "Logout Page"

blog.py

# blueprints/blog.py
from flask import Blueprint, render_template

blog = Blueprint('blog', __name__)

@blog.route('/')
def index():
    return render_template('blog/index.html')

@blog.route('/post/<int:post_id>')
def post(post_id):
    return f"Post {post_id}"

Paso 2: Registrar los Blueprints

# app.py
from flask import Flask
from blueprints.auth import auth
from blueprints.blog import blog

app = Flask(__name__)
app.register_blueprint(auth, url_prefix='/auth')
app.register_blueprint(blog, url_prefix='/blog')

if __name__ == '__main__':
    app.run(debug=True)

Paso 3: Crear las Plantillas

templates/auth/login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Login</title>
</head>
<body>
    <h1>Login Page</h1>
</body>
</html>

templates/blog/index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Blog</title>
</head>
<body>
    <h1>Blog Home Page</h1>
</body>
</html>

Ejercicio Práctico

Ejercicio

  1. Crea un nuevo Blueprint llamado admin con las siguientes rutas:

    • /dashboard: Debe devolver "Admin Dashboard".
    • /settings: Debe devolver "Admin Settings".
  2. Registra el Blueprint en tu aplicación principal con el prefijo de URL /admin.

Solución

admin.py

# blueprints/admin.py
from flask import Blueprint

admin = Blueprint('admin', __name__)

@admin.route('/dashboard')
def dashboard():
    return "Admin Dashboard"

@admin.route('/settings')
def settings():
    return "Admin Settings"

app.py

# app.py
from flask import Flask
from blueprints.auth import auth
from blueprints.blog import blog
from blueprints.admin import admin

app = Flask(__name__)
app.register_blueprint(auth, url_prefix='/auth')
app.register_blueprint(blog, url_prefix='/blog')
app.register_blueprint(admin, url_prefix='/admin')

if __name__ == '__main__':
    app.run(debug=True)

Conclusión

Los Blueprints son una herramienta poderosa para organizar aplicaciones Flask grandes y complejas. Permiten dividir la aplicación en módulos manejables, facilitando la colaboración y el mantenimiento del código. En este módulo, aprendiste a crear y registrar Blueprints, así como a estructurar tu aplicación de manera modular. En el próximo módulo, exploraremos cómo manejar errores y crear páginas de error personalizadas en Flask.

Curso de Desarrollo Web con Flask

Módulo 1: Introducción a Flask

Módulo 2: Conceptos Básicos de Flask

Módulo 3: Formularios y Entrada de Usuario

Módulo 4: Integración de Bases de Datos

Módulo 5: Autenticación de Usuarios

Módulo 6: Conceptos Avanzados de Flask

Módulo 7: APIs RESTful con Flask

Módulo 8: Despliegue y Producción

Módulo 9: Pruebas y Mejores Prácticas

Módulo 10: Extensiones y Ecosistema de Flask

© Copyright 2024. Todos los derechos reservados