flask+dash可视化的一些问题

1.如何在一个app中启动多个dash_app

如果我们有多个界面,且每个界面想用不同的dash_app,那我们就需要将一个flask的server提供给多个dash_app,并且在app.py中进行合并。这个时候就需要使用应用路由调度了。
文档内容如下
在这里插入图片描述
也就是说我们需要用DispatcherMiddleware为多个dash_app提供服务。

具体使用如下:

app.py

import flask
from flask import Flask
from werkzeug.middleware.dispatcher import DispatcherMiddleware
import dash
import dash_table
import dash_core_components as dcc
import dash_html_components as html
from pages.server import server
from showimg import dash_app3
from showdata import dash_app2

#dash服务
dash_app1 = dash.Dash(__name__, server=server,external_stylesheets=external_stylesheets,url_base_pathname='/index/')

#蓝图注册
server.register_blueprint(showdata.data)
server.register_blueprint(showimg.img)
server.register_blueprint(downcsv.download)
server.register_blueprint(bymd.md)


markdown_text = '''
       一些markdown内容
        '''

dash_app1.layout = html.Div([
    dcc.Markdown(children=markdown_text),
    html.Div(html.Img(src='图片链接',height=600,width=900))
])


@server.route('/')
def hello():
    return flask.redirect('/index')


app = DispatcherMiddleware(server, {
    '/dash1': dash_app1.server,
    '/dash2': dash_app2.server,
    '/dash3': dash_app3.server,
})

if __name__ == '__main__':
    server.run(port=3333,debug=True)

showdata.py

from flask import Blueprint
import flask
import dash
import dash_table
import dash_core_components as dcc
import dash_html_components as html
import pandas as pd
import pymysql
from pages.server import server


external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']
data=Blueprint('data',__name__)
dash_app2= dash.Dash(__name__,server=server,external_stylesheets=external_stylesheets,url_base_pathname='/show_data/')
#从数据库读取数据
def get_data():
    conn= pymysql.connect(host='localhost', user='root', password='xxxx', database='aml', charset='utf8')
    sql= "SELECT * FROM movie_data"
    df=pd.read_sql(sql=sql,con=conn)
    return df

df=get_data()
# 创建表格
dash_app2.layout = html.Div([
    html.Div(html.Center(html.Big('标题'))),
    dcc.Markdown(children= '''一些markdown内容'''),
    dash_table.DataTable(id='table',columns=[{"name": i, "id": i} for i in df.columns],data=df[:150].to_dict('records')),
])
@data.route('/data/')
def show():
    return flask.redirect('/show_data')

类似于这样,就可以在flask中使用多个dash_app。dash_app可以直接在网页渲染markdown内容,这也是为什么我选择使用多个dash_app去构建不同页面。
注意:文档中from werkzeug.wsgi import DispatcherMiddleware这样引入可能会找不到而报错,大多数选择是降低werkzeug的版本。而app.py中
from werkzeug.middleware.dispatcher import DispatcherMiddleware这样引入应该不会出现问题

2.在dash回调函数中的重定向问题

当我在用dash构建界面时,发现如果在回调函数中去使用flask的重定向会报错,显示返回的是重定向的response而不是json序列,所以dash无法显示。所以可以看到路由是被更改了,但是页面没有跳转。需要我们再去点击一下路由才能跳转,这个问题我还一直没有解决。

3.在flask中整合flask-blogging

起初我是想flask整合一个能写markdown并保存的板块,搜索发现大多整合方式都是使用editor.md,然后再去渲染,但是那样就更类似于博客,而不是我的简单书写markdown需求,所以去github上面搜了一下,发现了flask-blogging。虽然这个也算一个博客,但是很轻便,整合起来也很快。运用他给的例子,自己配置一些url和数据库路径就可以直接使用,效果也还不错。
在这里插入图片描述
并且这个还可以实现图片的上传保存。
在这里插入图片描述
推荐大家可以整合去试试,不过如果需要功能更强大的话还需要自己再多丰富一下。

成果图

在这里插入图片描述
在这里插入图片描述
前端这块还是很不了解,所以主要是靠dash去充当前端页面显示部分,但是dash用不上或者说不太适合使用的时候,界面就显得太过单调。准备去试试用vue弥补前端这块。更多关于使用的部分可以去看看官网给的文档。

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shelgi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值