文章目錄
-
-
- 1. 問題背景
- 2. 解決方案
-
- 2.1 解決思路
- 2.2 例子實戰
- Reference
-
1. 問題背景
在使用Dash架構實作可視化工具時,使用者回報希望可以下載下傳裡面的可視化表格為excel、csv等格式,網上簡單搜尋後,在這裡記錄下解決方案。
2. 解決方案
2.1 解決思路
在查閱資料的時候得到以下資訊——
- 通常的下載下傳功能是在後端(flask等)實作傳送檔案的邏輯,前端通過http接口請求檔案即可
- Dash是基于Flask和React的web架構,可以很友善地嵌入flask應用
基于這兩點資訊,提供簡單的解決思路——
- 将現有的Dash應用嵌入Flask應用(在初始化dash的時候指定flask server即可,按官網教程一分鐘搞定!)
- flask實作傳送檔案邏輯,提供HTTP接口
- 在Dash中通過超連結等形式,在前端顯示下載下傳入口,點選後調用上述檔案下載下傳接口
2.2 例子實戰
1.将現有的Dash應用嵌入Flask應用,這裡的嵌入是指我們的Dash應用成為Flask應用的一個頁面,如下在初始化Dash App的時候指定server和路徑即可。
import flask
import dash
import dash_html_components as html
server = flask.Flask(__name__)
@server.route('/')
def index():
return 'Hello Flask app'
app = dash.Dash(
__name__,
server=server,
routes_pathname_prefix='/dash/'
)
app.layout = html.Div("My Dash app")
if __name__ == '__main__':
app.run_server(debug=True)
2.實作傳送檔案邏輯,flask的實作方式有多種,可參考flask下載下傳檔案,此處示範使用最簡單的一種,如下,當調用該GET接口時,發送本地路徑下的
test.csv
檔案
@server.route('/download', methods=['GET'])
def download():
return send_from_directory('.', 'test.csv',as_attachment=True)
3.在Dash中通過超連結等形式,在前端顯示下載下傳入口,同樣采用最簡單的方式,如下
app.layout = html.Div([
#其他代碼
html.A("下載下傳", href='http://127.0.0.1:8050/download', target="_blank"),
#其他代碼
)
這樣即可實作檔案下載下傳的功能拉~
Reference
- Integrating Dash with Existing Web Apps
- flask下載下傳檔案