66

我有一个现有的 Flask 应用程序,我想有一条到另一个应用程序的路由。更具体地说,第二个应用是Plotly Dash应用。如何在现有的 Flask 应用程序中运行我的 Dash 应用程序?

@app.route('/plotly_dashboard') 
def render_dashboard():
    # go to dash app

我还尝试添加到 Dash 实例的路由,因为它是一个 Flask 应用程序,但我得到了错误:

AttributeError: 'Dash' object has no attribute 'route'
4

5 回答 5

68

文档

底层 Flask 应用程序可在app.server.

import dash
app = dash.Dash(__name__)
server = app.server

您还可以将自己的 Flask 应用程序实例传递给 Dash:

import flask
server = flask.Flask(__name__)
app = dash.Dash(__name__, server=server)

现在你已经有了 Flask 实例,你可以添加任何你需要的路由和其他功能。

@server.route('/hello')
def hello():
    return 'Hello, World!'

对于更一般的问题“我如何才能为两个相邻的 Flask 实例提供服务”,假设您最终没有像上面的 Dash 答案中那样使用一个实例,您将使用DispatcherMiddleware安装两个应用程序。

dash_app = Dash(__name__)
flask_app = Flask(__name__)

application = DispatcherMiddleware(flask_app, {'/dash': dash_app.server})
于 2017-08-23T20:50:17.193 回答
37

url_base_pathname在您的 Dash 实例中设置。

app_flask = flask.Flask(__name__)

app_dash = dash.Dash(__name__, server=app_flask, url_base_pathname='/pathname')

现在你可以在你想要的任何 Flask 路由下重定向到你的 Plotly Dashboard 应用程序。

@app_flask.route('/plotly_dashboard') 
def render_dashboard():
    return flask.redirect('/pathname')
于 2017-12-08T13:36:43.087 回答
16

好吧,对于像我这样足够懒惰的人,这里是代码

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)
于 2018-08-15T09:04:39.083 回答
0
#here are full codee
from dash import Dash
import flask
from dash import html

server = flask.Flask(__name__)
app = Dash(__name__, server=server, url_base_pathname='/ATM_Data_Anlaysis/')
app.layout = html.Div([html.H1('This Is head',style={'textAlign':'center'})])

@server.route("/dash")
def MyDashApp():
    return app.index()

if __name__ == '__main__':
    app.run_server(debug=True)
于 2021-12-23T06:34:46.050 回答
-3

为了解决这个问题,这就是我所做的并且是成功的。这应该记录在官方 DASH 文档中

####################################
import dash_core_components as dcc
import dash_html_components as html
from dash import Dash
from dash.dependencies import Input, State, Output

from flask          import Flask, flash, redirect, render_template,    request, session, abort, url_for, json, make_response

url_router=''

@application.route("/view_tables", methods=['GET','POST'])
def view_tabales:
  # Logic for displaying dashboard using Dash
  server.layout = html.Div(
                    children=[
                    #division for graph 1
                    html.Div([html.H1(children='Capital Charge'),],className='text-center'),

                    html.Div([html.Div([html.H3(children='''Correlation for assets'''),],className='text-primary'),
                                # define the graph
                                dcc.Graph(
                                    id='Delta-graph',
                                    figure={
                                        'data': [
                                            {'x': df_delta['Correlation_Level'], 
                                             'y': df_delta['Capital_Charge'], 
                                             'type': 'bar', 
                                             'name': 'Delta',
                                             #'domain': {'x': [0, .48],'y': [0, .49]},
                                             }
                                        ],
                                        # sizes the graph
                                        'layout': {
                                            'title': 'Delta','margin': {'l': 10, 'r': 0, 't': 30, 'b': 10},
                                            "height":300,
                                        }
                                    }
                                )],className='col-md-4'),
  url_router = 'Dash(__name__,server=application, url_base_pathname="/dash")'

然后你可以控制它从烧瓶内部走向哪个仪表板

if url_router !='':
      server = url_router

server.layout = html.Div(children = [html.H1(children = ' MEP dashboard - error 404')])


# run the app.
if __name__ == "__main__":
   # Setting debug to True enables debug output. This line should be
   # removed before deploying a production app.
   server.secret_key = os.urandom(12)
   server.run_server(debug=True,port=5000)

您可以在 Flask 代码之间使用不同的图表创建不同的函数,并继续以破折号调用代码

于 2018-04-26T13:48:43.573 回答