前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于flask入门教程-ajax+echarts简单实现一

关于flask入门教程-ajax+echarts简单实现一

作者头像
python与大数据分析
发布2022-03-11 17:16:14
8500
发布2022-03-11 17:16:14
举报
文章被收录于专栏:python与大数据分析

ECharts是一款基于JavaScript的数据可视化图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表。

本文通过echarts官网上的一个标准样例开始flask+ajax+echarts的第一步。

第一步:下面是从echarts官网上下载的一个样例,具体参见:https://echarts.apache.org/handbook/zh/get-started,在flask中进行路由定义即可。

代码语言:javascript
复制
@app.route('/echart1')
def bigscreen():
return render_template('echartexample.html')
代码语言:javascript
复制
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <!-- 引入刚刚下载的 ECharts 文件 -->
    <!--script src="..\static\js\echarts.min.js"></script-->
    <script src="/static/js/echarts.min.js"></script>
  </head>
  <body>
    <!-- 为 ECharts 准备一个定义了宽高的 DOM -->
    <div id="main" style="width: 600px;height:400px;"></div>
    <script type="text/javascript">
      // 基于准备好的dom,初始化echarts实例
      var myChart = echarts.init(document.getElementById('main'));
      // 指定图表的配置项和数据
      var option = {
        title: {
          text: 'ECharts 入门示例'
        },
        tooltip: {},
        legend: {
          data: ['销量']
        },
        xAxis: {
          data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
        },
        yAxis: {},
        series: [
          {
            name: '销量',
            type: 'bar',
            data: [5, 20, 36, 10, 10, 20]
          }
        ]
      };
      // 使用刚指定的配置项和数据显示图表。
      myChart.setOption(option);
    </script>
 </body>
 </html>

第二步:在flask中增加ajax逻辑接口,通过jsonfiy进行数据组装和返回。

代码语言:javascript
复制
@app.route('/getjson2', methods=['GET'])
def getjson2():
    reporttitle = '销量测试'
    goodstype = ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
    salenum = [5, 20, 36, 10, 10, 20]
    data = {'reporttitle': reporttitle, 'goodstype': goodstype, 'salenum': salenum, }
    return jsonify({'reporttitle': reporttitle, 'goodstype': goodstype, 'salenum': salenum, })


@app.route('/echartdemo2')
def echartdemo2():
    return render_template('echartdemo2.html')

在html中增加ajax代码实现。

代码语言:javascript
复制
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <!-- 引入刚刚下载的 ECharts 文件 -->
    <!--script src="..\static\js\echarts.min.js"></script-->
    <script src="/static/js/echarts.min.js"></script>
    <script src="/static/js/jquery.js"></script>
  </head>
  <body>
    <!-- 为 ECharts 准备一个定义了宽高的 DOM -->
    <div id="main" style="width: 600px;height:400px;"></div>
    <script type="text/javascript">
      // 基于准备好的dom,初始化echarts实例
      
      var myChart = echarts.init(document.getElementById('main'));
      // 指定图表的配置项和数据
      myChart.option = {
        title: {
          text: 'ECharts 入门示例'
        },
        tooltip: {},
        legend: {
          data: ['销量']
        },
        xAxis: {
          data: []
        },
        yAxis: {},
        series: [
          {
            name: '销量',
            type: 'bar',
            data: []
          }
        ]
      };
   alert('waiting....');
      // 使用刚指定的配置项和数据显示图表。
      myChart.showLoading();
      
      $.ajax({
       url:'/getjson2',
       result:{},
       type:'GET',
       dataType:'json',
       success:function(result){
         myChart.hideLoading();
          // 填入数据
          myChart.setOption({
             title: {
                    text: '异步数据加载'
                 },
             xAxis:{
                data:result.goodstype
             },
             yAxis: {},
             series:[{
                name:'销量',
                        type: 'bar',
                data:result.salenum
             }]
          })
       },
       error:function (msg) {
         console.log(msg);
                   alert('系统发生错误');
            }
      })
      
      
    </script>
 </body>
 </html>

第三步:通过数据库返回结果集再生成json,封装成路由,由前台调用

关于数据库返回json可参考前文

代码语言:javascript
复制
@app.route('/getjson3', methods=['GET'])
def getjson3():
    sql = 'select goodstype,salenum from saledata'
    result = db.session.execute(sql)

    # jsonify data1
    result = result.mappings().all()
    goodstype = [x['goodstype'] for x in result]
    salenum = [x['salenum'] for x in result]
    data = jsonify({'goodstype': goodstype, 'salename': salenum})
    # b'{"goodstype":["\\u886c\\u886b","\\u7f8a\\u6bdb\\u886b","\\u96ea\\u7eba\\u886b","\\u88e4\\u5b50","\\u9ad8\\u8ddf\\u978b","\\u889c\\u5b50"],
    # "salename":[5,20,36,10,10,20]}\n'
    # jsonify data2
    data = jsonify(goodstype=goodstype, salename=salenum)
    # b'{"goodstype":["\\u886c\\u886b","\\u7f8a\\u6bdb\\u886b","\\u96ea\\u7eba\\u886b","\\u88e4\\u5b50","\\u9ad8\\u8ddf\\u978b","\\u889c\\u5b50"],
    # "salename":[5,20,36,10,10,20]}\n'
    # jsonify data3
    data = jsonify(goodstype=[x['goodstype'] for x in result],
                   salenum=[x['salenum'] for x in result])
    # b'{"goodstype":["\\u886c\\u886b","\\u7f8a\\u6bdb\\u886b","\\u96ea\\u7eba\\u886b","\\u88e4\\u5b50","\\u9ad8\\u8ddf\\u978b","\\u889c\\u5b50"],
    # "salenum":[5,20,36,10,10,20]}\n'
    # jsonify data4
    result = db.session.execute(sql).fetchall()
    data = jsonify(goodstype=[x[0] for x in result],
                   salenum=[x[1] for x in result])
    # b'{"goodstype":["\\u886c\\u886b","\\u7f8a\\u6bdb\\u886b","\\u96ea\\u7eba\\u886b","\\u88e4\\u5b50","\\u9ad8\\u8ddf\\u978b","\\u889c\\u5b50"],
    # "salenum":[5,20,36,10,10,20]}\n'
    return data


@app.route('/echartdemo3')
def echartdemo3():
    return render_template('echartdemo3.html')

第三步的HTML文件和第二步完全相同

代码语言:javascript
复制
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <!-- 引入刚刚下载的 ECharts 文件 -->
    <!--script src="..\static\js\echarts.min.js"></script-->
    <script src="/static/js/echarts.min.js"></script>
    <script src="/static/js/jquery.js"></script>
  </head>
  <body>
    <!-- 为 ECharts 准备一个定义了宽高的 DOM -->
    <div id="main" style="width: 600px;height:400px;"></div>
    <script type="text/javascript">
      // 基于准备好的dom,初始化echarts实例
      
      var myChart = echarts.init(document.getElementById('main'));
      // 指定图表的配置项和数据
      myChart.option = {
        title: {
          text: 'ECharts 入门示例'
        },
        tooltip: {},
        legend: {
          data: ['销量']
        },
        xAxis: {
          data: []
        },
        yAxis: {},
        series: [
          {
            name: '销量',
            type: 'bar',
            data: []
          }
        ]
      };
   
      // 使用刚指定的配置项和数据显示图表。
      myChart.showLoading();
      
      $.ajax({
       url:'/getjson3',
       result:{},
       type:'GET',
       dataType:'json',
       success:function(result){
         myChart.hideLoading();
          // 填入数据
          myChart.setOption({
             title: {
                    text: '异步数据加载'
                 },
             xAxis:{
                data:result.goodstype
             },
             yAxis: {},
             series:[{
                name:'销量',
                        type: 'bar',
                data:result.salenum
             }]
          })
       },
       error:function (msg) {
         console.log(msg);
                   alert('系统发生错误');
            }
      })
      
      
    </script>
 </body>
 </html>
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-02-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 python与大数据分析 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档