Flask Blueprint: API del objeto Blueprint

Blueprint se usa para dividir la aplicación en módulos reutilizables; cada blueprint puede tener sus propias rutas, plantillas, archivos estáticos y hooks.

Forma de creación:

bp = Blueprint("auth", __name__)

Parámetros del constructor

Parámetro Tipo Valor predeterminado Descripción
name str Obligatorio Nombre del blueprint, se usa como prefijo de endpoint en url_for
import_name str Obligatorio Nombre del módulo donde se encuentra el blueprint, se usa para localizar recursos. Normalmente se pasa __name__
static_folder str None Carpeta de archivos estáticos del blueprint
static_url_path str None Ruta URL expuesta para los archivos estáticos
template_folder str None Carpeta de plantillas del blueprint
url_prefix str None Prefijo unificado para todas las rutas del blueprint, por ejemplo "/auth"
subdomain str None Subdominio para la coincidencia de rutas del blueprint
url_defaults dict None Parámetros URL predeterminados para las rutas del blueprint
root_path str None Ruta raíz del blueprint, normalmente se detecta automáticamente
cli_group str None Nombre del grupo de comandos CLI. Por defecto usa el nombre del blueprint

Atributos principales

Atributo Tipo Descripción
name str Nombre del blueprint; después de registrarlo se usa como prefijo de endpoint
cli AppGroup Grupo de comandos CLI exclusivo del blueprint; se pueden agregar comandos personalizados
has_static_folder bool Indica si se ha configurado una carpeta de archivos estáticos

Métodos de ruta

El uso del blueprint es igual que en la aplicación Flask, solo hay que cambiarappporbp:

Método Descripción
route(rule, **options) Decorador que vincula una URL a una función de vista
get / post / put / delete / patch(rule, **options) Decorador abreviado para métodos HTTP
add_url_rule(rule, endpoint, view_func, **options) Agregar reglas de URL de forma programática

Decoradores de hooks

Los hooks del blueprint solo afectan a las rutas dentro de ese blueprint:

Método Descripción
before_request Se ejecuta antes de todas las peticiones dentro del blueprint
after_request Se ejecuta después de la respuesta de las peticiones dentro del blueprint
teardown_request Se ejecuta cuando se destruye el contexto de la petición dentro del blueprint
errorhandler(code_or_exception) Manejador de errores dentro del blueprint
url_value_preprocessor Preprocesador de valores de URL dentro del blueprint
url_defaults Parámetros predeterminados de URL dentro del blueprint
template_filter / template_test / template_global Filtros de plantilla / pruebas / funciones globales del blueprint

Métodos específicos del Blueprint

Método Descripción
register(app, options) Registra el blueprint en la aplicación Flask. Se llama internamente mediante app.register_blueprint()
record(func) Registra una función de devolución de llamada que se invoca cuando el blueprint se registra en la aplicación
record_once(func) Igual que record, pero solo se ejecuta una vez aunque el blueprint se registre varias veces
make_setup_state(app, options) Crea un objeto de estado de registro del blueprint
send_static_file(filename) Envía archivos desde la carpeta de archivos estáticos del blueprint
open_resource(resource, mode="rb") Abre archivos de recursos en la ruta raíz del blueprint

Parámetros options al registrar el Blueprint

Al llamarapp.register_blueprint(bp, **options)se pueden pasar:

Parámetro Descripción
url_prefix Sobrescribe el prefijo de URL del blueprint
subdomain Sobrescribe el subdominio del blueprint
url_defaults Sobrescribe los valores predeterminados de URL del blueprint
name Renombra el blueprint (el mismo blueprint se puede registrar varias veces, cada vez con un nombre distinto)

Ejemplo de código

Ejemplo

from flask import Blueprint, render_template

# Crear el blueprint
bp = Blueprint("blog", __name__,
               url_prefix="/blog",
               template_folder="templates",
               static_folder="static")

# Registrar rutas
@bp.route("/")
def index():
    return render_template("blog/index.html")

@bp.route("/<int:post_id>")
def show(post_id):
    return f"Show post {post_id}"

# Hooks dentro del blueprint
@bp.before_request
def check_login():
    # Solo tiene efecto en las rutas /blog/*
    pass

# Registrar en la app
# app.register_blueprint(bp)
Otras extensiones