Dash-将可视化web面板同WSGI相结合(dash+wsgi,不再是调试模式)

在做Dash开发时,一般我们就简单的调用 app.run_server 就能启动服务器了,这个的好处是在更改了代码之后,浏览器也会跟着刷新页面,做起开发来就比较方便了。

import dash
import dash_core_components as dcc
import dash_html_components as html

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

app.layout = html.Div('Hello Dash!')

if __name__ == '__main__':
    app.run_server(host='localhost', debug=True)

上面是一个简单的页面,如果运行起来,我们在打印界面会看到下面的提示:

Running on http://localhost:8050/
Debugger PIN: 581-953-069
 * Serving Flask app "dash_show_app" (lazy loading)
 * Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
 * Debug mode: on
Running on http://localhost:8050/
Debugger PIN: 165-529-551

里面的那句 不用使用开发服务器去设置产品环境,应该用 WSGI server 替换。

但是这个要怎么做呢?

我在网上找了半天都没找打答案,去dash的论坛,也没人提,于是就去dash的文档中去找,后面被我找到了:

https://dash.plot.ly/integrating-dash

我是在 “将一个或多个Dash应用程序与现有WSGI应用程序相结合 下面看到了这个怎么使用,虽然是多个Dash与WSGI的结合,但是我可以只传递一个Dash应用程序,所以,按照这个方法就可以跑起来了。

其实知道之后很简单,不知道的时候就会无从下手,在上面的代码基础上加了几行代码就可以了:

import dash
import dash_core_components as dcc
import dash_html_components as html
from werkzeug.wsgi import DispatcherMiddleware # 引用多页面模块
from werkzeug.serving import run_simple #应用简单的 wsgi 服务端口

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

app.layout = html.Div('Hello Dash!')

if __name__ == '__main__':
    # app.run_server(host='localhost', debug=True)
    run_simple('localhost', port=8050, application=DispatcherMiddleware(server)) 
    # 这里改成这样,其中DispatcherMiddleware可以在后面传递一个字典参数,
    # 包含了访问多个Dash应用程序的键值对,其中键是网址中附带的路径名称,
    # 值就是app.server的对象,比如:
    # http://localhost:8050/app1/ 我们在传递时 {'/app1/': app1.server}
    # 而在app1的页面初始化时,指定app1的路径:
    # app1 = dash.Dash(__name__, requests_pathname_prefix='/app1/')
    # 其他的就依葫芦画瓢了

这么写之后,运行的结果就没有那个警告提示了:

 * Running on http://localhost:8050/ (Press CTRL+C to quit)

 

你可能感兴趣的:(Python,Dash)