django+echart绘制曲线图的方法示例

作者:bitko 时间:2023-04-22 20:56:52 

声明:请事先到官网下载echarts,另外本文引用了adminlte模板构建前台页面

views:


<!-- /.row -->
   <div class="row">
   <div class="col-xs-12">
    <!-- interactive chart -->
    <div class="box box-primary">
     <div class="box-header with-border">
      <i class="fa fa-bar-chart-o"></i>

<h3 class="box-title">网络趋势</h3>
        <div class="box-tools pull-right">
       <button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i>
       </button>
       <button type="button" class="btn btn-box-tool" data-widget="remove"><i class="fa fa-times"></i></button>
      </div>
     </div>
     <div class="box-body">
      <div class="row">
        <div class="col-md-9">
          </div>
     <div class="col-md-3">
     <form action="" method="post" id="net_range">
       <div class="box-tools">
      <div class="form-group" >
       <select onchange="submitForm_net();" class="form-control select2" style="width: 100%;" name="select_net">
       <span class="glyphicon glyphicon-search form-control-feedback"></span>
        <option selected="selected">{{ net_range_default }}</option>
        <option>0.5小时</option>
         <option>1小时</option>
        <option>1天 </option>
        <option>7天 </option>
        <option>30天 </option>
       </select>
      </div>
      <!-- /.form-group -->
     </div>
     <!-- /.col -->
     </form>
    </div>
    <!-- /.row -->
   </div>
      <div class="net" id="net-grow-chart" style="height: 300px;"></div>
     </div>
     <!-- /.box-body-->
    </div>
    <!-- /.box -->

</div>
   <!-- /.col -->
  </div>
  <!-- /.row -->

选择框 :


//表单提交
function submitForm_net(){
 var form_net = document.getElementById("net_range");
 form_net.submit();
}
ECAHRTS:

// #################### 【网络流量趋势】图形 ####################
var myChart_net_grow = echarts.init(document.getElementById('net-grow-chart'));
option_net_grow = {
  title: {
    text: '网络流量',
    subtext: ''
  },
  tooltip: {
    trigger: 'axis',
    axisPointer: {
      type: 'cross'
    }
  },
    legend: {
   data:['接收流量(kbps)','发送流量(kbps)']
 },
  toolbox: {
    show: true,
    feature: {
      saveAsImage: {}
    }
  },
  xAxis: {
    type: 'category',
    boundaryGap: false,
    zlevel: 1,
    data: [{% for i in netgrow_list %}'{{ i.chk_time | date:"m-d H:i:s" }}',{% endfor %}]
  },
  yAxis: {
    type: 'value',
    axisLabel: {
      formatter: '{value}'
    },
    axisPointer: {
      snap: true
    },
    max:100,
    min:0
  },
  series: [
    {
      name:'接收流量(kbps)',
      type:'line',
      smooth: true,
      data: [{% for i in netgrow_list %}{{ i.recv_kbps }},{% endfor %}]
    },
       {
      name:'发送流量(kbps)',
      type:'line',
      smooth: true,
      data: [{% for i in netgrow_list %}{{ i.send_kbps }},{% endfor %}]
    }
  ]
};
myChart_net_grow.showLoading(); //显示loading
setInterval(function () {
  myChart_net_grow.hideLoading(); //显示完成后不显示loading
  myChart_net_grow.setOption(option_net_grow, true);
},500);

VIEWS:


@login_required(login_url='/login')
def linux_monitor(request):
 messageinfo_list = models.TabAlarmInfo.objects.all()
 tagsdefault = request.GET.get('tagsdefault')
 if not tagsdefault:
   tagsdefault = models.TabLinuxServers.objects.order_by('tags')[0].tags
 cpu_range_defualt =  request.GET.get('cpu_range_default')
 if not cpu_range_defualt:
   cpu_range_defualt = '1小时'.decode("utf-8")
 mem_range_default = request.GET.get('mem_range_default')
 if not mem_range_default:
   mem_range_default = '1小时'.decode("utf-8")
 net_range_default = request.GET.get('net_range_default')
 if not net_range_default:
   net_range_default = '1小时'.decode("utf-8")
 hostinfo = models.TabLinuxServers.objects.all().order_by('tags')

net_begin_time = tools.range(net_range_default)
 cpu_begin_time = tools.range(cpu_range_defualt)
 mem_begin_time = tools.range(mem_range_default)
 end_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")

netgrow = models.OsInfoHis.objects.filter(tags=tagsdefault, recv_kbps__isnull=False).filter(
   chk_time__gt=net_begin_time, chk_time__lt=end_time).order_by('-chk_time')
 netgrow_list = list(netgrow)
 netgrow_list.reverse()

cpugrow = models.OsInfoHis.objects.filter(tags=tagsdefault, cpu_used__isnull=False).filter(
   chk_time__gt=cpu_begin_time, chk_time__lt=end_time).order_by('-chk_time')
 cpugrow_list = list(cpugrow)
 cpugrow_list.reverse()

memgrow = models.OsInfoHis.objects.filter(tags=tagsdefault, mem_used__isnull=False).filter(
   chk_time__gt=mem_begin_time, chk_time__lt=end_time).order_by('-chk_time')
 memgrow_list = list(memgrow)
 memgrow_list.reverse()

diskinfos = models.OsFilesystem.objects.filter(tags=tagsdefault)

try:
   osinfo = models.OsInfo.objects.get(tags=tagsdefault)
 except models.OsInfo.DoesNotExist:
   osinfo = models.OsInfoHis.objects.filter(tags=tagsdefault,cpu_used__isnull=False).order_by('-chk_time')[0]

if request.method == 'POST':
   if request.POST.has_key('select_tags') or request.POST.has_key('select_cpu')or request.POST.has_key('select_mem') or request.POST.has_key('select_net'):
     if request.POST.has_key('select_tags'):
       tagsdefault = request.POST.get('select_tags', None).encode("utf-8")
     elif request.POST.has_key('select_net'):
       net_range_defualt = request.POST.get('select_net',None)
     elif request.POST.has_key('select_cpu'):
       cpu_range_defualt = request.POST.get('select_cpu',None)
     elif request.POST.has_key('select_mem'):
       mem_range_default = request.POST.get('select_mem', None)
     return HttpResponseRedirect('/linux_monitor?tagsdefault=%s&net_range_default=%s&cpu_range_default=%s&mem_range_default=%s' %(tagsdefault,net_range_default,cpu_range_defualt,mem_range_default))

else:
     logout(request)
     return HttpResponseRedirect('/login/')

if messageinfo_list:
   msg_num = len(messageinfo_list)
   msg_last = models.TabAlarmInfo.objects.latest('id')
   msg_last_content = msg_last.alarm_content
   tim_last = (datetime.datetime.now() - msg_last.alarm_time).seconds / 60
   return render_to_response('linux_monitor.html', {'netgrow_list':netgrow_list,'cpugrow_list':cpugrow_list,'memgrow_list':memgrow_list, 'tagsdefault':tagsdefault, 'hostinfo':hostinfo, 'osinfo': osinfo,'net_range_default':net_range_default,'cpu_range_default':cpu_range_defualt,'mem_range_default':mem_range_default, 'messageinfo_list': messageinfo_list,
                         'msg_num': msg_num,'msg_last_content': msg_last_content, 'tim_last': tim_last,'diskinfos':diskinfos})
 else:
   return render_to_response('linux_monitor.html', {'netgrow_list':netgrow_list,'cpugrow_list':cpugrow_list,'memgrow_list':memgrow_list, 'tagsdefault':tagsdefault, 'hostinfo':hostinfo, 'osinfo': osinfo,'net_range_default':net_range_default,'cpu_range_default':cpu_range_defualt,'mem_range_default':mem_range_default,'diskinfos':diskinfos})

效果图:

django+echart绘制曲线图的方法示例

来源:https://blog.csdn.net/gumengkai/article/details/80055843

标签:Django,Echarts,画图
0
投稿

猜你喜欢

  • Python类的继承、多态及获取对象信息操作详解

    2023-09-09 21:27:52
  • Go channel结构体源码和读写和关闭过程详解

    2024-04-26 17:31:08
  • SQLServer 游标简介与使用说明

    2009-07-02 13:53:00
  • 机器深度学习二分类电影的情感问题

    2022-07-17 06:13:28
  • MySQL定时全库备份数据库

    2024-01-15 18:44:42
  • Python 异步等待任务集合

    2022-08-14 17:23:22
  • Python字典取键、值对的方法步骤

    2021-12-12 15:26:12
  • pandas选择或添加列生成新的DataFrame操作示例

    2023-03-02 00:41:51
  • Python3中小括号()、中括号[]、花括号{}的区别详解

    2022-05-31 09:20:36
  • go语言之给定英语文章统计单词数量(go语言小练习)

    2023-09-16 09:11:12
  • 使用python实现回文数的四种方法小结

    2022-01-17 14:57:51
  • Python re正则表达式元字符分组()用法分享

    2021-05-15 12:31:56
  • Python常用数据库接口sqlite3和MySQLdb学习指南

    2024-01-16 00:53:56
  • CSS3变换入门

    2010-01-30 13:29:00
  • javascript 获取select下拉列表值的代码

    2024-04-19 09:50:04
  • Windows下使Python2.x版本的解释器与3.x共存的方法

    2021-03-14 22:22:17
  • Python实现网络端口转发和重定向的方法

    2023-09-23 10:19:59
  • ASP在线升级类文件源码

    2008-10-10 13:09:00
  • python为tornado添加recaptcha验证码功能

    2023-04-26 19:57:12
  • Python 中的with关键字使用详解

    2022-10-03 08:25:25
  • asp之家 网络编程 m.aspxhome.com