首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flask的DispatcherMiddleware与普洛特利的破折号玩得不好

Flask的DispatcherMiddleware与普洛特利的破折号玩得不好
EN

Stack Overflow用户
提问于 2017-08-31 02:23:24
回答 1查看 3.2K关注 0票数 2

我有一个现有的Flask web应用程序,我想将现有的Dash应用程序(a Plotly Flask app)合并到它中。作为Flask's documentation recommends,我使用DispatcherMiddleware来实现这一点:

代码语言:javascript
复制
flask_app = Flask(__name__) # App with both apps attached to it 
app = Flask(__name__) # Existing Flask App 
dash_app = Dash(__name__) # Dash app 

dash_app.config.supress_callback_exceptions = True

# Use DispatcherMiddleware to route separate apps into one
flask_app.wsgi_app = DispatcherMiddleware(app, {'/dash': dash_app.server})

我们最终运行flask_app

代码语言:javascript
复制
if __name__ == "__main__":
    flask_app.run(debug=True)

但是,当我访问127.0.0.1:<port>/dash/时,网页上出现以下错误:

我在控制台日志中看到以下内容:

代码语言:javascript
复制
127.0.0.1 - - [30/Aug/2017 11:11:02] "GET /dash HTTP/1.1" 301 -
127.0.0.1 - - [30/Aug/2017 11:11:02] "GET /dash/ HTTP/1.1" 200 -
127.0.0.1 - - [30/Aug/2017 11:11:03] "GET /_dash-layout HTTP/1.1" 404 -
127.0.0.1 - - [30/Aug/2017 11:11:03] "GET /_dash-dependencies HTTP/1.1" 404 

如何才能为我的Dash应用正确加载布局?

EN

回答 1

Stack Overflow用户

发布于 2017-09-16 01:07:30

这就是我克服这个问题的方法。不是很漂亮,但很有效。

您需要run.py:

代码语言:javascript
复制
from werkzeug.wsgi import DispatcherMiddleware
from werkzeug.serving import run_simple
from server import server
from dash_app  import app as app1
from flask_app import app as app2

app = DispatcherMiddleware(server, 
                           {'/myflaskapp': app2})
if __name__ == '__main__':
    run_simple('localhost', 5000, app, use_reloader=True)

您的server.py将如下所示:

代码语言:javascript
复制
from flask import Flask, render_template

server = Flask(__name__)

@server.route('/')
def server_root():
    return render_template('index.html')

您的dash_app.py:

代码语言:javascript
复制
import dash
from server import server
app = dash.Dash(name='mydash', sharing=True, server=server, url_base_pathname='/mydash')

最后是你的flask_app.py:

代码语言:javascript
复制
from flask import Flask
app = Flask(__name__)
@app.route("/news")
def news():
    return render_template('news.html')

你的新闻在/myflaskapp/ flask_app

你的dash_app地址是/mydash

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45967340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档