我想创建一个Flask Web应用程序。我想将多个Dash-App集成到此站点中,并在首页上显示每个Dash-app的链接。
这是一个最小的示例:
主页应如下所示:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def main():
return "Hello World"
if __name__ == "__main__":
app.run(debug = True)
可以说我们有一个Dash应用,看起来像这样:
import dash
import dash_html_components as html
app = dash.Dash(__name__)
app.layout = html.Div("Hello world 1")
if __name__=="__main__":
app.run_server(debug=True)
我的问题现在是:如何通过以下方式将Dash应用程序集成到Flask应用程序中:
1)Flask应用程序中应有一个指向Dash应用程序的链接2)Dash应用程序的位置应为例如/dash(在这种情况下,主页位于/)3)如果存在是第二个和第三个Dash应用程序,应该容易添加其他链接和位置(例如/dash2,/dash3,...)
有很多有关此问题的文章-但是,我没有发现任何最小的例子。
参考方案
将一个或多个Dash应用程序与现有WSGI应用程序结合
以下示例通过将两个Dash应用程序与Flask应用程序结合使用来说明这种方法。
flask_app.py
from flask import Flask
flask_app = Flask(__name__)
@flask_app.route('/')
def index():
return 'Hello Flask app'
app1.py
import dash
import dash_html_components as html
app = dash.Dash(
__name__,
requests_pathname_prefix='/app1/'
)
app.layout = html.Div("Dash app 1")
app2.py
import dash
import dash_html_components as html
app = dash.Dash(
__name__,
requests_pathname_prefix='/app2/'
)
app.layout = html.Div("Dash app 2")
wsgi.py
from werkzeug.wsgi import DispatcherMiddleware
from app1 import app as app1
from app2 import app as app2
application = DispatcherMiddleware(flask_app, {
'/app1': app1.server,
'/app2': app2.server,
})
在此示例中,Flask应用程序已安装在/上,而两个Dash应用程序已安装在/ app1和/ app2上。在这种方法中,我们不会将Flask服务器传递给Dash应用程序,而是让它们创建自己的服务器,DispatcherMiddleware会根据传入请求的前缀将请求路由到这些服务器。在每个Dash应用程序中,必须将request_pathname_prefix指定为该应用程序的安装点,以匹配DispatcherMiddleware设置的路由前缀。
请注意,wsgi.py中的应用程序对象的类型为werkzeug.wsgi.DispatcherMiddleware,它没有运行方法。可以像这样的WSGI应用程序运行:
$ gunicorn wsgi:application
或者,您可以使用Werkzeug开发服务器(不适合生产)运行该应用程序:
运行
from werkzeug.wsgi import DispatcherMiddleware
from werkzeug.serving import run_simple
from app1 import app as app1
from app2 import app as app2
application = DispatcherMiddleware(flask_app, {
'/app1': app1.server,
'/app2': app2.server,
})
if __name__ == '__main__':
run_simple('localhost', 8050, application)
如果在使用这种方法时需要访问Dash开发工具(无论是与WSGI服务器一起运行还是使用Werkzeug开发服务器),则必须为每个Dash应用程序手动调用它们。可以在初始化DispatcherMiddleware之前添加以下行以执行此操作:
app1.enable_dev_tools(debug=True)
app2.enable_dev_tools(debug=True)
注意:调试模式不应在生产中启用。在Gunicorn上使用调试模式时,必须使用--reload命令行标志才能热加载工作。
在此示例中,与两个Dash应用程序组合的现有应用程序是Flask应用程序,但是这种方法可以实现WSGI规范的任何Web应用程序组合。可以在带有一个或多个Dash应用程序的WSGI文档中找到WSGI Web框架列表。
参考-https://dash.plot.ly/integrating-dash
编辑:
没有WSGI的多个Dash应用
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 Dash1')])
dash_app2.layout = html.Div([html.H1('Hi there, I am Dash2')])
@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)
flask:异常后停止服务器 - python
我想在发生未处理的异常时立即停止我的Flask服务器。这是一个例子:from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): 1/0 # argh, exception return 'Hello World!' i…WTForms Flask(wtf_flask)验证程序如何为RadioField包括“必需”属性 - python
我基本上在寻找的是WTForms的InputRequired()的RadioField等效验证器。我的意思是,当您尝试提交表单而不在具有InputRequired()验证器的StringField字段中输入任何文本时,用户会在文本字段上方看到提示,提示是"Please fill out this field"。我希望用户必须选择male或…在返回'Response'(Python)中传递多个参数 - python
我在Angular工作,正在使用Http请求和响应。是否可以在“响应”中发送多个参数。角度文件:this.http.get("api/agent/applicationaware").subscribe((data:any)... python文件:def get(request): ... return Response(seriali…Python Dash Plotly:在悬停时显示默认最近数据或在图形中比较悬停时的数据 - python
我正在使用Dash Plotly构建一个简单的应用程序。默认设置是图形“比较悬停时的数据”。我想将默认设置更改为“在悬停时显示最近的数据”:如何在下面的代码中完成此操作?import dash import dash_core_components as dcc import dash_html_components as html app = dash.D…Flask Cors无法运作 - python
我正在尝试在Flask应用程序中启用CORS,但无论我把来源如何,似乎总是可以从浏览器访问URL。我不知道我做错了什么。这是我的代码from flask import Flask, jsonify from flask_cors import CORS app = Flask(__name__) CORS(app, resources={r'/*&…