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)
# 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)