[PYTHON] Flask 앱에서 대시 앱 실행하기
PYTHONFlask 앱에서 대시 앱 실행하기
기존의 Flask 앱이 있는데 다른 앱에 대한 경로를 갖고 싶습니다. 더 구체적으로 두 번째 앱은 Plotly Dash 앱입니다. 기존 Flask 앱에서 대시 앱을 실행하려면 어떻게해야합니까?
@app.route('/plotly_dashboard')
def render_dashboard():
# go to dash app
Flask 앱이기 때문에 Dash 인스턴스에 대한 경로를 추가하려고 시도했지만 오류가 발생합니다.
AttributeError: 'Dash' object has no attribute 'route'
해결법
-
==============================
1.문서에서 :
문서에서 :
Flask 인스턴스가 생겼으므로 필요한 경로와 기타 기능을 추가 할 수 있습니다.
@server.route('/hello') def hello(): return 'Hello, World!'
좀 더 일반적인 질문 인 "어떻게 서로 옆에 두 개의 Flask 인스턴스를 제공 할 수 있습니까?"위의 대시 답변 에서처럼 하나의 인스턴스를 사용하지 않는다고 가정하면 DispatcherMiddleware를 사용하여 두 응용 프로그램을 모두 마운트합니다.
dash_app = Dash(__name__) flask_app = Flask(__name__) application = DispatcherMiddleware(flask_app, {'/dash': dash_app.server})
-
==============================
2.Dash 인스턴스에 url_base_pathname을 설정하십시오.
Dash 인스턴스에 url_base_pathname을 설정하십시오.
app_flask = flask.Flask(__name__) app_dash = dash.Dash(__name__, server=app_flask, url_base_pathname='/pathname')
이제 원하는 플라스크 (Flask) 경로 아래에서 플롯 대시 보드 앱으로 리디렉션 할 수 있습니다.
@app_flask.route('/plotly_dashboard') def render_dashboard(): return flask.redirect('/pathname')
-
==============================
3.좋아, 나처럼 게으른 사람들은 여기 코드가있다.
좋아, 나처럼 게으른 사람들은 여기 코드가있다.
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)
-
==============================
4.이 문제를 해결하기 위해 내가 한 일과 성공한 일이 여기에 있습니다. 이 내용은 공식 DASH 문서에 문서화되어야합니다.
이 문제를 해결하기 위해 내가 한 일과 성공한 일이 여기에 있습니다. 이 내용은 공식 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 코드간에 다른 그래프로 다른 함수를 만들 수 있으며 대시로 코드를 계속 호출 할 수 있습니다.
from https://stackoverflow.com/questions/45845872/running-a-dash-app-within-a-flask-app by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] django에서 현지 표준 시간대 가져 오기 (0) | 2018.10.20 |
---|---|
[PYTHON] Python, Popen 및 select - 프로세스 종료 또는 대기 시간 기다림 (0) | 2018.10.20 |
[PYTHON] python의 로깅 모듈을 사용하여 모든 예외 및 오류 기록 (0) | 2018.10.20 |
[PYTHON] 사전 목록 반복 (0) | 2018.10.20 |
[PYTHON] 서브 프로세스로 여러 개의 bash 명령 실행하기 (0) | 2018.10.20 |