• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Flask+TinyDB+echarts做的可视化

武飞扬头像
白日与明月
帮助1

背景:

相关介绍

TinyDB:这个是一个小型的NoSQL数据库,免配置,API也比较简单,不依赖额外的包 ,数据存储在一个json文件中。对于一些简单的场景,其实可以代替大型的数据库。(嗯,因为大部分的时候,我面对的场景里,一些小型数据库就可以了,比如sqlite,所以想尝试下这个库,来代替一些东西)。

安装:

pip install tinydb

echarts: 百度开源的一个基于 JavaScript 的开源可视化图表库。按着文档其实就可以快速可视化一个图表,但是我一直弄不明白如何做异步加载。其实写这个也主要是想弄明白一下flask echarts怎么实现异步数据加载。 

代码

main.py

  1.  
    from flask import Flask,render_template,request,redirect,url_for,jsonify
  2.  
    from tinydb import TinyDB,Query
  3.  
     
  4.  
    app=Flask(__name__)
  5.  
     
  6.  
    db=TinyDB("db.json")
  7.  
     
  8.  
    @app.route("/")
  9.  
    def index():
  10.  
    return render_template("index.html")
  11.  
     
  12.  
    @app.route("/add",methods=["POST"])
  13.  
    def add():
  14.  
    typename=request.form.get("typename")
  15.  
    cnt=request.form.get("cnt")
  16.  
    db.insert({'name':typename,"value":int(cnt)})
  17.  
    return redirect(url_for("index"))
  18.  
    @app.route("/truncate")
  19.  
    def truncate():
  20.  
    db.truncate()
  21.  
    return redirect(url_for("index"))
  22.  
     
  23.  
    @app.route("/getdata")
  24.  
    def getdata():
  25.  
    data=db.all()
  26.  
    return jsonify(data)
  27.  
     
  28.  
    if __name__ == '__main__':
  29.  
    app.run(debug=True)
学新通

index.html

  1.  
    <!DOCTYPE html>
  2.  
    <html lang="en">
  3.  
    <head>
  4.  
    <meta charset="UTF-8">
  5.  
    <title>Title</title>
  6.  
    <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.0.2/css/bootstrap.min.css" rel="stylesheet">
  7.  
    <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.18/css/jquery.dataTables.min.css"/>
  8.  
    <script src="https://code.jquery.com/jquery-3.3.1.js"></script>
  9.  
    <script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.0.2/js/bootstrap.min.js"></script>
  10.  
    <script src="https://cdn.bootcdn.net/ajax/libs/echarts/5.1.2/echarts.js"></script>
  11.  
    <script src="https://cdn.datatables.net/1.10.18/js/jquery.dataTables.min.js"></script>
  12.  
    </head>
  13.  
    <body>
  14.  
    <div class="container">
  15.  
    <br>
  16.  
    <form class="form-inline" action="/add" method="post" role="form">
  17.  
    <div class="form-group">
  18.  
    <label for="typename">类型</label>
  19.  
    <input type="text" class="form-control" id="typename" name="typename" style="width:100px;">
  20.  
    </div>
  21.  
    <div class="form-group">
  22.  
    <label for="cnt">数量</label>
  23.  
    <input type="text" class="form-control" id="cnt" name="cnt" style="width:100px;">
  24.  
    </div>
  25.  
    <button type="submit" class="btn btn-default">提交</button>
  26.  
    <a href="/truncate" class="btn btn-danger">清空</a>
  27.  
    </form>
  28.  
    <br>
  29.  
     
  30.  
    <br>
  31.  
    <div class="row">
  32.  
    <div class="col-md-5">
  33.  
    <div id="main" style="width: 100%;height:400px;"></div>
  34.  
    </div>
  35.  
    <div class="col-md-7">
  36.  
    <div id="main2" style="width: 100%;height:400px;"></div>
  37.  
    </div>
  38.  
     
  39.  
    </div>
  40.  
     
  41.  
     
  42.  
    <script>
  43.  
    var myChart = echarts.init(document.getElementById('main'));
  44.  
    $.get('/getdata', function (data) {
  45.  
    myChart.setOption({
  46.  
    series : [
  47.  
    {
  48.  
    name: '访问来源',
  49.  
    type: 'pie', // 设置图表类型为饼图
  50.  
    radius: '55%', // 饼图的半径,外半径为可视区尺寸(容器高宽中较小一项)的 55% 长度。
  51.  
    data:data
  52.  
    }
  53.  
    ]
  54.  
    })
  55.  
    }, 'json')
  56.  
    var myChart2 = echarts.init(document.getElementById('main2'));
  57.  
    $.get('/getdata', function (data) {
  58.  
    var xdata=new Array();
  59.  
    for (var x=0;x<data.length;x ){
  60.  
    var info=data[x];
  61.  
    xdata[x]=info['name'];
  62.  
    }
  63.  
    myChart2.setOption({
  64.  
    xAxis:{
  65.  
    type:"category",
  66.  
    data: xdata
  67.  
    },
  68.  
    yAxis:{
  69.  
    type:"value"
  70.  
    },
  71.  
    series : [
  72.  
    {
  73.  
    name: '来源',
  74.  
    type: 'bar',
  75.  
    data: data
  76.  
    }
  77.  
    ]
  78.  
    })
  79.  
    }, 'json')
  80.  
     
  81.  
    </script>
  82.  
    </div>
  83.  
    </body>
  84.  
    </html>
学新通

效果:

学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgahckf
系列文章
更多 icon
同类精品
更多 icon
继续加载