django+echart绘制曲线图的方法示例
作者:bitko 发布时间:2023-04-22 20:56:52
标签:Django,Echarts,画图
声明:请事先到官网下载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})
效果图:
来源:https://blog.csdn.net/gumengkai/article/details/80055843


猜你喜欢
- 正则表达式是处理字符串的强大工具。作为一个概念而言,正则表达式对于Python来说并不是独有的。但是,Python中的正则表达式在实际使用过
- 引言“深入认识Python内建类型”这部分的内容会从源码角度为大家介绍Python中各种常用的内建类
- 场景描述:场景描述:一个接口(IPerson)有很多个的字段,可能有几百。而且这些字段都是必须的。我们需要使用这个接口,但是我又不可能使用它
- 本文不讲归一化原理,只介绍实现(事实上看了代码就会懂原理),代码如下:def Normalize(data): m = np.mean(da
- 一、前言今天在这边专门整理了一遍文章,和大家一起聊聊如何使用python做PC端自动化!二、环境安装使用python实现来做PC端自动化,前
- 进程的概念程序是没有运行的代码,静态的;进程是运行起来的程序,进程是一个程序运行起来之后和资源的总称;程序只有一个,但同一份程序可以有多个进
- 最简单的办法就是直接在php程序代码中加入下面代码:error_reporting(E_ALL^E_NOTICE^E_WARNING);可以
- 本文实例讲述了Python实现微信中找回好友、群聊用户撤回的消息功能。分享给大家供大家参考,具体如下:还在好奇好友撤回了什么消息吗?群里撤回
- golang字符串比较的三种常见方法fmt.Println("go"=="go")fmt.Print
- 值类型和引用类型值类型:int、float、bool和string这些类型都属于值类型,使用这些类型的变量直接指向存在内存中的值,值类型的变
- 1. 引言在数据处理、机器学习等领域,我们经常需要对各式各样的数据进行处理,本文重点介绍三种非常简单的方法来检测数据集中的异常值。 
- 目录连接池是什么?为什么需要连接池?连接池的原理是什么?使用python语言自制简易mysql连接池开始使用自定义配置文件名 & 配
- 过年前产假归来,jmeter很多知识生疏了,这两天打开jmeter摸索了几下,老了记不住,还是准备弄个jmeter系列随笔吧。言归正传,使用
- 语法: ROW_NUMBER() OVER([ <partition_by_clause>] <order_by_clau
- 由于众所周知的原因,ACCESS在大型站点应用中都靠不上边,主要问题就是数据量大了以后几乎无法索引。当ACCESS里数据过万后,明显可以感觉
- 平衡二叉树:在上一节二叉树的基础上我们实现,如何将生成平衡的二叉树所谓平衡二叉树:我自己定义就是:任何一个节点的左高度和右高度的差的绝对值都
- 正解使用useRouter:// router的 path: "/user/:uid"<template>
- 在windows下安装配置Ulipad今天推荐一款轻便的文本编辑器Ulipad,用来写一些小的Python脚本非常方便。Ulipad下载地址
- 这种组合使得开发Web程序简单、安全、效率高。由于程序是在Linux下运行,虽免去了版权费用,对数据库的管理却少了Windows下的图形界面
- sorted 用于对集合进行排序(这里集合是对可迭代对象的一个统称,他们可以是列表、字典、set、甚至是字符串),它的功能非常强大1、对列表