es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Mismo plantilla de tablero de instrumentos con diferentes conjuntos de datos dentro de una aplicación Flask. ¿Cómo hacerlo?

Estoy buscando la manera más sencilla de generar el mismo panel de control de Dash X veces con diferentes conjuntos de datos. Cada panel de control es una página individual y la aplicación principal es una aplicación de Flask.

El objetivo es tener una plantilla de panel de control en diferentes instancias de Dash con conjuntos de datos diferentes.

Comencé con el siguiente código, pero estoy teniendo dificultades cuando los paneles de Dash incluyen devoluciones de llamada, es decir, cuando html.Div([html.H1('Hola, soy la aplicación 1 para informes')]) se convierte en una función más grande con una devolución de llamada.

import dash
import dash_html_components as html
from flask import Flask, render_template, redirect
from werkzeug.middleware.dispatcher import DispatcherMiddleware

app = Flask(__name__)

@app.route('/')
def hello_world():
    return '¡Hola desde Flask!'

@app.route('/test2')
def t2():
    return render_template('test2.html')

dash_app1 = dash.Dash(__name__, server=app, url_base_pathname='/dashboard/')
dash_app2 = dash.Dash(__name__, server=app, url_base_pathname='/reports/')
dash_app1.layout = html.Div([html.H1('Hola, soy la aplicación 1 para informes')])
dash_app2.layout = html.Div([html.H1('Hola, soy la aplicación 2 para informes')])

@app.route('/dashboard')
def render_dashboard():
    return redirect('/dash1')

@app.route('/reports')
def render_reports():
    return redirect('/dash2')

app = DispatcherMiddleware(app, {
    '/dash1': dash_app1.server,
    '/dash2': dash_app2.server
})

Entonces, mi pregunta es cuál es la mejor manera/arquitectura para administrar múltiples paneles de control de Dash, basados en la misma plantilla, que se ejecutan con diferentes datos?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Una forma de lograr esto es crear una función que genere una nueva instancia de la aplicación Dash para cada conjunto de datos, utilizando la misma plantilla de tablero. Esta función puede tomar el conjunto de datos como argumento y manejar la creación de los componentes y devoluciones de llamada del tablero necesarios. Aquí hay un ejemplo de implementación:

    import dash
    import dash_html_components as html
    
    def create_dashboard(dataset):
        app = dash.Dash(__name__)
        app.layout = html.Div([
            html.H1(f"Tablero para {dataset}"),
            # Agregar otros componentes según sea necesario
        ])
        @app.callback(...)
        def update_dashboard(...):
            # Definir devolución de llamada para actualizar el tablero según el conjunto de datos
            # y la entrada del usuario
            pass
        return app
    
    # Generar múltiples instancias de Dash para diferentes conjuntos de datos
    datasets = ["A", "B", "C"]
    dashboards = [create_dashboard(dataset) for dataset in datasets]
    

    Al utilizar una función como create_dashboard, puedes generar fácilmente múltiples tableros con la misma plantilla pero diferentes datos. También puedes reutilizar componentes y devoluciones de llamada en diferentes tableros separándolos en funciones o módulos separados. Para gestionar los tableros a un nivel superior, puedes utilizar una aplicación Flask con múltiples rutas que se asignen a los diferentes tableros. En cada ruta, simplemente puedes servir la instancia del tablero correspondiente utilizando el atributo server de la aplicación Dash:

    from flask import Flask
    
    app = Flask(__name__)
    
    @app.route("/dashboard1")
    def dashboard1():
        return dashboards[0].server
    
    @app.route("/dashboard2")
    def dashboard2():
        return dashboards[1].server
    
    # Agregar más rutas según sea necesario para otros tableros
    

    Este enfoque te permite gestionar fácilmente múltiples tableros con diferentes datos, al mismo tiempo que reutilizas la misma plantilla y componentes para minimizar la duplicación y simplificar el mantenimiento.

Comments are closed.