django+highcharts+jquery+mysql

本文介绍了如何在Django项目中结合Highcharts、jQuery和MySQL数据库来展示数据图表。重点在于理解Highcharts对数据格式的要求,Django视图处理数据的方式,以及在模板中正确引入和配置必要的JS库。同时,文章提到了并发访问时可能遇到的问题,如全局变量tmp_time导致的问题,并提供了Flask与Highcharts结合的相关参考资料。
摘要由CSDN通过智能技术生成

前端:

后台请求:

hcharts.html:发现jquery-1.8.3.min.js库,highstock.js库和exporting.js库的版本很重要,一定要选对应的

<!DOCTYPE html>
<head> 
   <!--  {% load staticfiles %}
    {% load bootstrap3 %}
    {% bootstrap_css %}
    {% bootstrap_javascript %} -->
    <title>51highchart</title>
    <meta charset='utf-8'>
</head>

<body>
{% csrf_token %}
{% load staticfiles %}

<div id="container" style="height: 400px; min-width: 200px"></div>

<!-- <script src='/static/jquery.js'></script> -->
<script src="https://img.hcharts.cn/jquery/jquery-1.8.3.min.js"></script>
<!-- <script src="https://img.hcharts.cn/highcharts/highcharts.js"></script> -->
<script src="https://code.highcharts.com/stock/highstock.js"></script>
<script src="https://img.hcharts.cn/highcharts/modules/exporting.js"></script>
<script src="https://img.hcharts.cn/highcharts-plugins/highcharts-zh_CN.js"></script>
<!-- <script src='/static/highstock.js'></script> -->
<!-- <script src='/static/exporting.js'></script> -->

<!-- <script type="text/javascript" src="http://cdn.hcharts.cn/jquery/jquery-1.8.3.min.js"></script>
<script type="text/javascript" src="http://cdn.hcharts.cn/highcharts/highcharts.js"></script>
<script type="text/javascript" src="http://cdn.hcharts.cn/highcharts/modules/exporting.js"></script> -->
<script>
$(function () {
    // 使用当前时区,否则东八区会差八个小时
    Highcharts.setOptions({
        global: {
            useUTC: false
        }
    });
    $.getJSON('/data', function (data) {
        // Create the chart
        $('#container').highcharts('StockChart', {
        chart:{
        events:{
            load:function(){
                // var series = this.series[0]
                var series = this.series[0]
                setInterval(function(){
                $.getJSON('/data',function(res){
                    $.each(res,function(i,v){
                        series.addPoint(v)
                    })
                })
                },3000)
            }
        }
        },
            rangeSelector : {
                selected : 1
            },
            title : {
                text : '内存数据'
            },
            series : [{
                name : '本机内存',
                // data : data,
                data : data,
                tooltip: {
                    valueDecimals: 2
                }
            }]
        });
    });
});


// $.getJSON('data/', function (data) {
//     // Create the chart
//     $('#container').highcharts('StockChart', {
//     chart:{
//     events:{
//         load:function(){
//             var series = this.series[0]
//             setInterval(function(){
//             $.getJSON('data/',function(res){
//                 $.each(res,function(i,v){
//                     series.addPoint(v)
//                 })
//             })
//             },3000)
//         }
//     }
//     },
//         rangeSelector : {
//             selected : 1
//         },
//         title : {
//             text : '内存数据'
//         },
//         series : [{
//             name : '本机内存',
//             data : data,
//             tooltip: {
//                 valueDecimals: 2
//             }
//         }]
//     });
// });
// setInterval(function(){
//     $.getJSON('/data',function(res){
//         $.each(res,function(i,v){
//             // series.addPoint(v)
//             $("p").append(v + " ");
//         })
//     })
//     },3000)

$(document).ready(function(){
  $("button").click(function(){
    $.getJSON("/data",function(result){
      $.each(result, function(i, field){
        $("p").append(field + " ");
      });
    });
  });
});
</script>
<button>获得 JSON 数据</button>
<p></p>
</body>
</html>

django view.py处理文件,Django中比没有配置使用MySQL数据库,而是直接用pymysql调用而已

#coding=utf-8
from django.shortcuts import render
from django.http import HttpResponse, HttpResponseRedirect
from django.contrib import auth
from django.contrib.auth.decorators import login_required
from blog.models import Article

from django.http import JsonResponse
import pymysql as mysql
import json
con = mysql.connect(host='192.168.43.212',port=3306,user='test',passwd='test',db='test')
con.autocommit(True)
cur = con.cursor()
tmp_time = 0
# sql = 'select * from memory'
# cur.execute(sql)
# for line in cur.fetchall():
#     print line
# Create your views here.

def index(request):
    return render(request,"index.html")
#@login_required
def movie(request):
    return render(request,"movie.html")
#@login_required
def edindex(request):
    Articles = Article.objects.all()
    #print type(Articles)    
    return render(request,"edindex.html",{"Articles":Articles})


#@login_required
def mod(request):
    articles = Article.objects.all()  
    return render(request,"mod.html",{'articles':articles})


#@login_required
def articlelist(request,article_id): 
    #articles = Article.objects.all()  
    article = Article.objects.get(pk=article_id)
    return render(request,"articlelist.html",{'article':article})

#@login_required
def articleforeword(request):
    #articles = Article.objects.all()  
    return render(request,"articleforeword.html")


@login_required
def modtool(request):
    return render(request,"modtool.html")

@login_required
def echart1(request):
    return render(request,"hcharts1.html")

@login_required
def echart2(request):
    return render(request,"echarts2.html")

@login_required
def hcharts(request):
    return render(request,"hcharts.html")


@login_required
def data(request):
    # sql = 'select * from memory'
    # cur.execute(sql)
    # for line in cur.fetchall():
    #     print line
    global tmp_time
    if tmp_time>0:
        sql = 'select * from memory where time>%s'%(tmp_time/1000)
    else:
        sql = 'select * from memory'
    cur.execute(sql)
    arr = []
    for i in cur.fetchall():
        arr.append([i[1]*1000,i[0]])
    if len(arr)>0:
        tmp_time = arr[-1][0]
    print json.dumps(arr)
    print tmp_time
    # return JsonResponse(json.dumps(arr))
    # return JsonResponse(json.dumps(arr))
    # return json.dumps(arr)
    # return render(request,'hcharts.html',json.dumps(arr))
    # return HttpResponseRedirect(json.dumps(arr))
    return HttpResponse(json.dumps(arr))

@login_required
def login_action(request):
    if request.method == 'POST':
        username = request.POST.get('username', '')
        password = request.POST.get('password', '')
        user = auth.authenticate(username=username, password=password)
        if user is not None:
            auth.login(request, user) # 登录
            request.session['user'] = username # 将session 信息记录到浏览器
            response = HttpResponseRedirect('modtool/')
            return response
        else:
            return render(request,'index.html', {'error': 'username or password error!'})
    else:
        return render(request,'index.html', {'error': 'username or password error!'})

#@login_required
def event_manage(request):
    username = request.session.get('user', '') # 读取浏览器cookie
    #return render(request,"event_manage.html",{"user":username,"Articles":Article})
    return render(request,"event_manage.html",{"user":username})

注意highcharts接收的数据什么类型,用不同的response返回的数据类型是不一样的。用

@login_required
def data(request):
    # sql = 'select * from memory'
    # cur.execute(sql)
    # for line in cur.fetchall():
    #     print line
    global tmp_time
    if tmp_time>0:
        sql = 'select * from memory where time>%s'%(tmp_time/1000)
    else:
        sql = 'select * from memory'
    cur.execute(sql)
    arr = []
    for i in cur.fetchall():
        arr.append([i[1]*1000,i[0]])
    if len(arr)>0:
        tmp_time = arr[-1][0]
    print json.dumps(arr)
    print tmp_time
    # return JsonResponse(json.dumps(arr))
    # return JsonResponse(json.dumps(arr))
    # return json.dumps(arr)
    # return render(request,'hcharts.html',json.dumps(arr))
    # return HttpResponseRedirect(json.dumps(arr))
    return HttpResponse(json.dumps(arr))

url.py

from django.conf.urls import patterns,include, url
from django.contrib import admin
from blog import views
from django.conf.urls.static import static
#from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    #url(r'^ckeditor/', include(ckeditor.urls)),
    url(r'^ckeditor/', include('ckeditor_uploader.urls')),
    
    url(r'^$', views.index),
    url(r'^index/$', views.index),
    url(r'^logout/$', views.index), 
    url(r'^mod/logout/$', views.index),
    url(r'^event_manage/logout/$', views.index),
    url(r'^accounts/login/$', views.index),   
    url(r'^admin/', views.index),


    url(r'^mod/$', views.mod),
    url(r'^modtool/$', views.modtool),
    url(r'^login_action/modtool/$', views.modtool),
    url(r'^edindex', views.edindex),
    url(r'^login_action/$', views.login_action),
    url(r'^event_manage/$', views.event_manage),
    url(r'^movie/$',views.movie,name="movie"),
    url(r'^articlelist/(?P<article_id>[0-9]+)$', views.articlelist,name='articlelist'),
    url(r'^articleforeword/$',views.articleforeword),


    url(r'^echart1/$', views.echart1), 
    url(r'^echart2/$', views.echart2), 
    url(r'^hcharts/$', views.hcharts), 
    #url(r'^hcharts/data/$', views.hcharts), 
    url(r'^hcharts/data$', views.data), 
    url(r'^data$', views.data), 
]

总结:Django与highcharts结合,难点在数据块格式。同时注意绘制图标要有相适应的js库;设置csrf;highcharts引入时大小中括号的闭合。

问题:后台tmp_time是一个全局变量,当同时打开多个窗口时,并发访问时会出现的问题

global tmp_time


flask与highchart结合:https://blog.csdn.net/jackliu16/article/details/78944316

https://blog.csdn.net/jackliu16/article/details/78942638



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值