在做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)