Python+Flask+ngrok调度刷新echarts数据并部署

 

 


 

 

开发echarts网页 

 

 线上js地址,如果不能用,随便打开一个echarts浏览器进入开发者模式,找到js地址

https://cdn.jsdelivr.net/npm/echarts@5.0.1/dist/echarts.min.js

如果想换最新的js地址,在这里看

 也可以直接把js下载到本地, 但是没有用cdn的线上资源方便。 

比如热更新这个图表:https://echarts.apache.org/examples/zh/editor.html?c=dataset-encode0 

他的本地文件是这么写的,只更新option,其他的头文件不动


<html>
<head>
    <meta charset="utf-8">
    <title>this is biaoti</title>
    <script src="https://cdn.jsdelivr.net/npm/echarts@5.0.1/dist/echarts.min.js"></script>
</head>
<body>
<div id="main" style="width: 600px;height:400px;"></div>
<script type="text/javascript">

        var myChart = echarts.init(document.getElementById('main'));
        var option = {
    dataset: {
        source: [['score', 'amount', 'product'], ['89.3', '58212', 'Matcha Latte'], ['57.1', '78254', 'Milk Tea'], ['74.4', '41032', 'Cheese Cocoa'], ['50.1', '12755', 'Cheese Brownie'], ['89.7', '20145', 'Matcha Cocoa'], ['68.1', '79146', 'Tea'], ['19.6', '91852', 'Orange Juice'], ['10.6', '101852', 'Lemon Juice'], ['32.7', '20112', 'Walnut Brownie']]
    },
    grid: {containLabel: true},
    xAxis: {name: 'amount'},
    yAxis: {type: 'category'},
    visualMap: {
        orient: 'horizontal',
        left: 'center',
        min: 10,
        max: 100,
        text: ['High Score', 'Low Score'],
        // Map the score column to color
        dimension: 0,
        inRange: {
            color: ['#65B581', '#FFCE34', '#FD665F']
        }
    },
    series: [
        {
            type: 'bar',
            encode: {
                // Map the "amount" column to X axis.
                x: 'amount',
                // Map the "product" column to Y axis
                y: 'product'
            }
        }
    ]
};
        myChart.setOption(option);

</script>
</body>
</html>

 感兴趣的小伙伴,把以上代码copy一下,在自己电脑新建一个txt,粘贴进去,名字改成1.html,然后再用浏览器打开,就可以看到图表。

但是这个图表的数据我想每日更新怎么办呢? 

py代码如下: 

# -*-coding:utf-8-*-
import  pandas as pd

biaoti='this is biaoti'

df=pd.read_csv('xxx.csv')

dicct2=[]
for i in df.itertuples():
    dict1=[]
    dict1.append(i.score)
    dict1.append(i.amount)
    dict1.append(i.product)
    print(dict1)
    dicct2.append(dict1)

print(dicct2)

s1 = """
<html>
<head>
    <meta charset="utf-8">
    <title>%s</title>
    <script src="https://cdn.jsdelivr.net/npm/echarts@5.0.1/dist/echarts.min.js"></script>
</head>
<body>
<div id="main" style="width: 600px;height:400px;"></div>
<script type="text/javascript">

        var myChart = echarts.init(document.getElementById('main'));
        var option = {
    dataset: {
        source: %s
    },
    grid: {containLabel: true},
    xAxis: {name: 'amount'},
    yAxis: {type: 'category'},
    visualMap: {
        orient: 'horizontal',
        left: 'center',
        min: 10,
        max: 100,
        text: ['High Score', 'Low Score'],
        // Map the score column to color
        dimension: 0,
        inRange: {
            color: ['#65B581', '#FFCE34', '#FD665F']
        }
    },
    series: [
        {
            type: 'bar',
            encode: {
                // Map the "amount" column to X axis.
                x: 'amount',
                // Map the "product" column to Y axis
                y: 'product'
            }
        }
    ]
};
        myChart.setOption(option);

</script>
</body>
</html>
"""%(biaoti,dicct2)

with open('h2_result.html', 'wb+') as f:
    f.write(s1.encode())
    f.flush()
    f.close()

 只要更新这个xxx.csv文件即可,这是csv的表头。echarts的数据就会自动更新

 现在遇到了一个问题,生成的是一个文件,我想分享给别人,怎么办? 

如果你有云服务器,就不用往下看了,如果想用自己的电脑分享一个网址给别人,下面我教你

建立一个flask项目

打开pycahrm, 新建一个项目,叫做flaskdemo

项目里面新建文件夹static

把你开发的echarts网页放在static里面

在flaskdemo文件夹下面,新建一个叫做app.py的py脚本

# -*-coding:utf-8-*-

from flask import  Flask

app=Flask(__name__,
          static_folder='./static'
          )

@app.route("/")
def index():
    return 'zhuye'

if __name__ == '__main__':

    app.run(host='0.0.0.0',port=5000)

运行这个py脚本

我们看到下面这个就是成功了

* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

然后http://127.0.0.1:5000/static/1.html就可以打开你放的html文件了
但是,这个地址只有局域网能访问,如果想对外访问。往下看

如何调度上传网页呢? 

在app.py里面加入upload方法。


@app.route("/static", methods=["POST", "GET"])
def upload():
    file = request.files.get('pic')
    fname2=file.filename
    if file is None:
        return "nothing found"
    file.save("static/%s"%(fname2))
    return "upload    success"

 这样运行以后,我们就可以往这端口上传html文件了,

客服端怎么上传呢?看我下面的代码

import requests

url = "http://127.0.0.1:5000//static"
path= "h2.html"
files = {'pic': open(path, "rb")}
r = requests.post(url, files=files)
print(r)

 打印出200就是上传成功,至此,你已经动态的刷新了echarts的数据,并且上传到服务器了,就差一个对外共享的网页地址了。

获得公众网络可以访问的网址

下载注册ngrok

https://ngrok.com/download 这里下载安装

然后去这里注册一个你rok哥的账号,  我们的目的是要那个token这里  https://dashboard.ngrok.com/auth/your-authtoken

这是我的token 1nnIwp751ucpJXj8WNwjWMPlzyk_**uHNvHCks3ePJfHTruoU 

ngrok authtoken 1nnIwp751ucpJXj8WNwjWMPlzyk_**uHNvHCks3ePJfHTruoU 

在命令行输入 

ngrok http 5000

其中  https://136e2834e996.ngrok.io 就是你可以访问的外网地址了 

 任何人,只要联网,打开 https://136e2834e996.ngrok.io/static/1.html都可以看到你的echarts网页

参考文章:

https://zhuanlan.zhihu.com/p/45471645

 

Ngrok下载地址: 备用的

链接:https://pan.baidu.com/s/16Io2OUp2zOA2rdJqXsyFNw 
提取码:lijf 
复制这段内容后打开百度网盘手机App,操作更方便哦

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值