J'ai une application Flask existante et je souhaite avoir un itinéraire vers une autre application. Plus concrètement, la deuxième application est un Plotly Dash app. Comment puis-je exécuter mon application Dash dans mon application Flask existante?
@app.route('/plotly_dashboard')
def render_dashboard():
# go to dash app
J'ai également essayé d'ajouter un itinéraire à l'instance Dash, car il s'agit d'une application Flask, mais j'obtiens l'erreur suivante:
AttributeError: 'Dash' object has no attribute 'route'
De la docs :
L'application Flask sous-jacente est disponible à l'adresse
app.server
.import dash app = dash.Dash(__name__) server = app.server
Vous pouvez également passer votre propre instance d'application Flask dans Dash:
import flask server = flask.Flask(__name__) app = dash.Dash(__name__, server=server)
Maintenant que vous avez l'instance Flask, vous pouvez ajouter les itinéraires et autres fonctionnalités dont vous avez besoin.
@server.route('/hello')
def hello():
return 'Hello, World!'
A la question plus générale "comment puis-je servir deux instances Flask l'une à côté de l'autre", si vous n'utilisez pas une instance comme dans la réponse Dash ci-dessus, vous utiliseriez DispatcherMiddleware
pour monter les deux applications.
dash_app = Dash(__name__)
flask_app = Flask(__name__)
application = DispatcherMiddleware(flask_app, {'/dash': dash_app.server})
Définissez url_base_pathname
dans votre instance Dash.
app_flask = flask.Flask(__name__)
app_dash = dash.Dash(__name__, server=app_flask, url_base_pathname='/pathname')
Vous pouvez maintenant rediriger vers votre application Plotly Dashboard sous les itinéraires Flask de votre choix.
@app_flask.route('/plotly_dashboard')
def render_dashboard():
return flask.redirect('/pathname')
Ok pour ceux qui sont assez paresseux comme moi, voici le code
from dash import Dash
from werkzeug.wsgi import DispatcherMiddleware
import flask
from werkzeug.serving import run_simple
import dash_html_components as html
server = flask.Flask(__name__)
dash_app1 = Dash(__name__, server = server, url_base_pathname='/dashboard' )
dash_app2 = Dash(__name__, server = server, url_base_pathname='/reports')
dash_app1.layout = html.Div([html.H1('Hi there, I am app1 for dashboards')])
dash_app2.layout = html.Div([html.H1('Hi there, I am app2 for reports')])
@server.route('/')
@server.route('/hello')
def hello():
return 'hello world!'
@server.route('/dashboard')
def render_dashboard():
return flask.redirect('/dash1')
@server.route('/reports')
def render_reports():
return flask.redirect('/dash2')
app = DispatcherMiddleware(server, {
'/dash1': dash_app1.server,
'/dash2': dash_app2.server
})
run_simple('0.0.0.0', 8080, app, use_reloader=True, use_debugger=True)
Si vous souhaitez intégrer une application Dash dans une application Flask qui utilise:
découvrez la solution complète dans le référentiel dash_on_flask .
Les explications détaillées sont ici .