app.add_url_rule es un método de Flask que permite registrar rutas en la aplicación manualmente.
Es una alternativa al uso del decorador @app.route.
En lugar de usar un decorador, puedes usar este método para definir rutas, sus funciones asociadas y otros parámetros.
Sintaxis
app.add_url_rule(rule, endpoint=None, view_func=None, **options) rule:
La URL de la ruta. Ejemplo: ”/”, “/mi-ruta”.
endpoint (opcional):
Nombre interno que se usa para referirse a la ruta (por ejemplo, en url_for). Si no lo defines, Flask lo asigna automáticamente usando el nombre de la función asociada.
view_func:
La función que se ejecutará cuando se acceda a la ruta.
**options (opcional):
Diccionario de opciones adicionales, como el método HTTP (methods) permitido. Ejemplo: methods=[“GET”, “POST”].
Imagina que tienes una estructura de proyecto con módulos separados para vistas:
mi_proyecto/
│
├── app/
│ ├── __init__.py
│ ├── routes.py
│ └── views.py
│
├── config.py
└── run.py views.py: Define las funciones de vista.
from flask import render_template
def home():
return render_template('index.html')
def about():
return render_template('about.html')
def contact():
return render_template('contact.html')
def services():
return "Estos son nuestros servicios"
def greet_user(username):
return f"Hola, {username}!" routes.py: Define y registra las rutas utilizando add_url_rule:
from .views import home, about, contact, services, greet_user
def registrar_rutas(app):
app.add_url_rule('/', 'home', home)
app.add_url_rule('/about', 'about', about)
app.add_url_rule('/contact', 'contact', contact)
app.add_url_rule('/services', 'services', services)
app.add_url_rule('/greet/<username>', 'greet_user', greet_user) __init__.py: Inicializa la aplicación e importa las rutas:
from flask import Flask
from .routes import registrar_rutas
def create_app():
app = Flask(__name__)
registrar_rutas(app)
return app run.py: Corre la aplicación:
from app import create_app
app = create_app()
if __name__ == "__main__":
app.run(debug=True, port=5000) Más rutas agregadas:
/contact: Muestra información de contacto./services: Muestra los servicios ofrecidos./greet/<username>: Muestra un saludo dinámico con el nombre del usuario.index.html: Este archivo HTML contiene enlaces a todas las rutas que hemos definido (como la página de inicio, contacto, servicios y saludo personalizado).
<a href="/greet/Urian"> muestra cómo podemos usar rutas dinámicas (/greet/<username>). Modularidad: Las rutas están definidas en routes.py, y las funciones de vista están en views.py, lo que permite mantener el código limpio y organizado.
Desarrollo: Al correr la aplicación Flask, podrás acceder a estas rutas desde tu navegador y ver el comportamiento de cada una.
Si tienes dudas o quieres explorar más, te comparto un proyecto práctico donde se utiliza add_url_rule para registrar rutas en una aplicación Flask.
Consulta el repositorio en GitHub.
¿Por qué usar add_url_rule en estructuras más grandes?
Separación de responsabilidades:
Flexibilidad:
Escalabilidad:
En resumen, add_url_rule no define una estructura como tal, pero encaja bien en proyectos con modularidad y organización clara, especialmente a medida que crece la cantidad de rutas en tu aplicación Flask.