django jsonresponse_利用 Django 动态展示 Pyecharts 图表数据的几种方法

30816ec9f3436a58a0619ad5554b8c32.png

本文将介绍如何在 web 框架 Django 中使用可视化工具 Pyecharts, 看完本教程你将掌握几种动态展示可视化数据的方法!

Django 模板渲染

1. 新建一个 Django 项目

命令行中输入以下命令

django-admin startproject pyecharts_django_demo

创建一个应用程序

python manage.py startapp demo

创建完之后,在 Pycharm 中打开该项目,当然你也可以直接在 Pycharm 中创建

9cb4c570d11ffae22e6f48e3e1ba86e6.png

同时在 pyecharts_django_demo/settings.py 中注册应用程序INSTALLED_APPS 中添加应用程序 demo

在 pyecharts_django_demo/urls.py 中新增 demo.urls

9f7cb683d995b1dc4aa9de8b4dd4a864.png

2. 新建项目 urls 文件

编辑 demo/urls.py 文件,没有就新建一个

from django.conf.urls import url
from . import viewsurlpatterns = [url(r'^pie/$', views.ChartView.as_view(), name='demo'),url(r'^index/$', views.IndexView.as_view(), name='demo'),
]

3. 编写 Django 和 pyecharts 代码渲染图表

由于 json 数据类型的问题,无法将 pyecharts 中的 JSCode 类型的数据转换成 json 数据格式返回到前端页面中使用。

因此在使用前后端分离的情况下尽量避免使用 JSCode 进行画图。

将下列代码保存到 demo/views.py 中

from django.shortcuts import render# Create your views here.import json
from random import randrangefrom django.http import HttpResponse
from rest_framework.views import APIViewfrom pyecharts.charts import Bar, Pie
from pyecharts.faker import Faker
from pyecharts import options as opts# Create your views here.
def response_as_json(data):json_str = json.dumps(data)response = HttpResponse(json_str,content_type="application/json",)response["Access-Control-Allow-Origin"] = "*"return responsedef json_response(data, code=200):data = {"code": code,"msg": "success","data": data,}return response_as_json(data)def json_error(error_string="error", code=500, **kwargs):data = {"code": code,"msg": error_string,"data": {}}data.update(kwargs)return response_as_json(data)JsonResponse = json_response
JsonError = json_errordef pie_base() -> Pie:c = (Pie().add("", [list(z) for z in zip(Faker.choose(), Faker.values())]).set_colors(["blue", "green", "yellow", "red", "pink", "orange", "purple"]).set_global_opts(title_opts=opts.TitleOpts(title="Pie-示例")).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")).dump_options_with_quotes())return cclass ChartView(APIView):def get(self, request, *args, **kwargs):return JsonResponse(json.loads(pie_base()))class IndexView(APIView):def get(self, request, *args, **kwargs):return HttpResponse(content=open("./templates/index.html").read())

4. 编写画图的 HTML 代码

在根目录下新建一个 templates 的文件夹,并在该文件夹下新建一个 index.html 文件

bd7f953b4b3431da968562bdd756760f.png

index.html

代码如下:

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>Awesome-pyecharts</title><script src="https://cdn.bootcss.com/jquery/3.0.0/jquery.min.js"></script><script type="text/javascript" src="https://assets.pyecharts.org/assets/echarts.min.js"></script></head>
<body>
<div id="pie" style="width:1000px; height:600px;"></div>
<script>var chart = echarts.init(document.getElementById('pie'), 'white', {renderer: 'canvas'});$(function () {fetchData(chart);});function fetchData() {$.ajax({type: "GET",url: "http://127.0.0.1:8000/demo/pie",dataType: 'json',success: function (result) {chart.setOption(result.data);}});}
</script>
</body>
</html>

运行之后,在浏览器中打开,效果如下:

3dfe31321b3d2cebaa8f261a63359648.png

定时全量更新图表

前面讲的是一个静态数据的展示的方法,用 Pyecharts 和 Django 结合最主要是实现一种动态更新数据,增量更新数据等功能!

定时全量更新主要是前端主动向后端进行数据刷新,定时刷新的核心在于 HTML 的 setInterval 方法。

那么 index.html 代码就是下面这样的:

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>Awesome-pyecharts</title><script src="https://cdn.bootcss.com/jquery/3.0.0/jquery.min.js"></script><script type="text/javascript" src="https://assets.pyecharts.org/assets/echarts.min.js"></script></head>
<body><div id="bar" style="width:1600px; height:800px;"></div><script>var chart = echarts.init(document.getElementById('bar'), 'white', {renderer: 'canvas'});$(function () {fetchData(chart);setInterval(fetchData, 100);});function fetchData() {$.ajax({type: "GET",url: "http://127.0.0.1:8000/demo/bar",dataType: 'json',success: function (result) {chart.setOption(result.data);}});}</script>
</body>
</html>

同时在 demo/views.py 中,增加并修改代码:

c6b3dadf634d5b7cce462f5e61700ccd.png

views.py

demo/urls.py中,增加如下代码:

urlpatterns = [url(r'^pie/$', views.ChartView.as_view(), name='demo'),url(r'^bar/$', views.ChartView.as_view(), name='demo'),url(r'^index/$', views.IndexView.as_view(), name='demo'),
]

运行之后,效果如下:

v2-4244d2e84bf739f461fc7bd788ff01e3_b.gif

贴一张以前做的图(因为我懒),效果和上面一样

定时增量更新图表

原理一样,先修改 index.html ,代码如下:

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>Awesome-pyecharts</title><script src="https://cdn.bootcss.com/jquery/3.0.0/jquery.min.js"></script><script type="text/javascript" src="https://assets.pyecharts.org/assets/echarts.min.js"></script></head>
<body><div id="bar" style="width:1600px; height:800px;"></div><script>var chart = echarts.init(document.getElementById('bar'), 'white', {renderer: 'canvas'});var old_data = [];$(function () {fetchData(chart);setInterval(fetchData, 2000);});function fetchData() {$.ajax({type: "GET",url: "http://127.0.0.1:8000/demo/line",dataType: "json",success: function (result) {var options = result.data;chart.setOption(options);old_data = chart.getOption().series[0].data;}});}function getDynamicData() {$.ajax({type: "GET",url: "http://127.0.0.1:8000/demo/lineUpdate",dataType: 'json',success: function (result) {var options = result.data;old_data.push([options.name, options.value]);chart.setOption({series: [{data: old_data}]});}});}</script>
</body>
</html>

细心的你应该可以发现,里面新增了两个请求地址 demo/line, demo/lineUpdate

so,在 urlpatterns 中增加以下路径的匹配

url(r'^line/$', views.ChartView.as_view(), name='demo'),
url(r'^lineUpdate/$', views.ChartView.as_view(), name='demo'),

最后在 views.py 中增加以下代码:

def 

运行并打开,效果如下:

c4f941912fe24e99969313e5acbb9bbb.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/498966.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python网页登录验证码不显示_进网页需要验证码?不好意思,Python从来不惧各种验证码!...

今天要来说说滑动验证码了大家应该都很熟悉点击滑块然后移动到图片缺口进行验证现在越来越多的网站使用这样的验证方式为的是增加验证码识别的难度那么&#xff0c;对于这种验证码应该怎么破呢接下来就是见证神奇的时刻打开 b 站的登录页面可以看到登录的时候需要进行滑块验证按…

怎么调用新建模型里文章的内容_优雅地进行Tensorflow Lite模型转换

初涉知乎江湖&#xff0c;知道大佬很多&#xff0c;请温柔以待&#xff01;&#xff01;&#xff01;七日凌晨&#xff0c;谷歌连夜发布了有关于Tensorflow最新成果和技术&#xff0c;这应该是贾扬清离开脸书后另一个深度学习界令人惊呼的事件了吧&#xff01;&#xff08;旁白…

elastic java_ElasticSearch和Java环境变量

当我下载并解压缩elasticsearch并运行/bin/service.bat或/bin/elasticsearch.bat文件时&#xff0c;我进入了终端&#xff1a;JAVA_HOME environment variable must be set! Press any key to continue . . .当我这样做时&#xff0c;终端关闭。我已经卸载并重新安装&#xff0…

git add后取消_Git常用命令-总结

创建git用户$ git config --global user.name "Your Name"$ git config --global user.email "emailexample.com"初始化一个Git仓库&#xff0c;使用git init命令。添加文件到Git仓库&#xff0c;分两步&#xff1a;使用命令git add &#xff0c;注意&…

java数组图片_在JAVA中定义图片数组

为实现此意图需要分三段来实现&#xff1a;1。 初始化&#xff1a; Image[] imgnew Image[n];for(int i0;iimg[i]Toolkit.getDefaultToolkit().createImage(....)//装入图片位置}2. 启动变换图片与刷新界面线程run(){//线程入口while(flag){index;index%n;(或写成if(index>n…

查看csv编码_[小O地图-数据] - 坐标转地址文字(逆地理编码)

小O地图是一款基于互联网地图进行地理数据处理、分析、图表的软件。致力为广大科研人员提供专业地图数据&#xff0c;用于科研及学习。小&#xff2f;地图提供将【经纬度坐标转换为地址】的功能&#xff0c;例如&#xff1a;将“116.359861, 39.917225” 转换为 “北京市西城区…

c# mysql 封装_C#简单通用的数据库连接封装

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Data;usingSystem.Data.SqlClient;namespaceDbLib{/// ///数据库类/// public classDatabase : IDisposable{/// ///受保护的数据库连接/// protecte…

python自动化办公源码_python自动化办公:文件篇(自动整理文件,一键完成)

import os list_all[]#初始化一个空列表 for root ,dirs,files in os.walk(rC:UsersShineionDesktop新建文件夹): for name in files: file_pathos.path.join(root,name)#包含路径的文件 file_nameos.path.split(file_path)[-1] list_all.append(file_name) print(list_all)如果…

java中no1_Java程序设计实验(NO.1).doc

Java程序设计实验(NO.1)1、实验目的&#xff1a;使用Java的String类操作字符串和子串。写一个程序可以对两个字符串进行测试&#xff0c;判断第一个字符串是否包含在第二个字符串中&#xff0c;例如字符串“op”包含在字符串“interoperabilityop”中。当第一个字符串包含在第二…

ocr中文数据集_CNOCR:测试集准确率最高98%,自带识别模型的中文OCR包

今天 Gitee 为大家介绍的是一款中文 OCR 包。大家都知道&#xff0c;训练模型是一件非常费时费力的事情&#xff0c;但今天这款项目已经自带训练好的识别模型&#xff0c;我们只需要下载下来使用即可&#xff0c;可以说是非常方便了&#xff0c;那么下面我们就去看看这个项目的…

java inner static_Java SE Static Inner

Java SE Static Inner/*内部类使用示例*/package demo;class Outer{int outer_i100;static int outer_j200;final int outer_k300;void test(){Inner in new Inner();in.display();}static class Inner{void display(){System.out.println("display: outer_j "/*ou…

python知识点分支图_python教程,pythonh学习线路图?

相信对于每个人而言&#xff0c;知道编程和学习编程这件事&#xff0c;出发点是不同的。汤哥在北京接触编程的时间是2013年&#xff0c;那个时候还在一个二线城市上大学&#xff0c;还没有这么多各种融资,各种互联网创业的氛围&#xff0c;大家想的更多的是一些线下的&#xff…

sha算法源代码java_SHA算法Java实现

一 简介安全散列算法固定长度摘要信息二 SHA算法SHA-1、SHA-2(SHA-224、SHA-256、SHA384、SHA-512)三 SHA算法实现package com.imooc.security.sha; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.Security; impo…

python定义函数求和_Python定义函数实现累计求和操作

一、使用三种方法实现0-n累加求和 定义函数分别使用while循环、for循环、递归函数实现对0-n的累加求和 1、使用while循环 定义一个累加求和函数sum1(n),函数代码如下&#xff1a; 2、使用 for循环 定义一个累加求和函数sum2(n),函数代码如下&#xff1a; 3、使用递归函数 定义一…

python策略模式_Python-设计模式之策略模式

一次策略模式的代码实践需求清单1.单个商品购买数量大于20个&#xff0c;订单折扣10%2.商品种类超过或等于5个&#xff0c;订单折扣20%3.订单总价超过10000元&#xff0c;订单折扣15%4.客户积分达到2000&#xff0c;折扣7%目前折扣计算方式有4种&#xff0c;为了提高代码的扩展…

arraylist remove() java_执行ArrayList的remove(object)方法抛异常?

简介或许有很多小伙伴都尝试过如下的代码&#xff1a;然后会发现抛出java.util.ConcurrentModificationException异常&#xff0c;这是一个并发异常。那么这个到底是什么情况&#xff1f;首先需要介绍一下增强for循环增强for循环增强for循环是Java1.5后&#xff0c;Collection实…

centos gdb调试_gdb-miss-debuginfo

使用gdb调试core时候&#xff0c;提示Missing separate debuginfos的解决办法。错误提示错误提示信息如下&#xff1a;Missing separate debuginfos, use: debuginfo-install glibc-2.17-106.el7_2.8.x86_64 libaio-0.3.109-13.el7.x86_64 libgcc-4.8.5-4.el7.x86_64 libstdc-4…

用java编写保留两位小数_Java保留两位小数的几种写法总结

摘要&#xff1a;这篇Java开发技术栏目下的“Java保留两位小数的几种写法总结”&#xff0c;介绍的技术点是“Java保留两位小数、保留两位小数、两位小数、Java、小数、总结”&#xff0c;希望对大家开发技术学习和问题解决有帮助。本文列举了几个方法&#xff1a;1. 使用java.…

怎么判断自己启动的线程是否执行完成 java_多线程?怎么用?

Java线程&#xff1a;概念与原理操作系统中线程和进程的概念现在的操作系统是多任务操作系统。多线程是实现多任务的一种方式。进程是指一个内存中运行的应用程序&#xff0c;每个进程都有自己独立的一块内存空间&#xff0c;一个进程中可以启动多个线程。比如在Windows系统中&…

java 线程由浅入深_Java多线程:由浅入深看synchronized的底层实现原理

Java多线程&#xff1a;由浅入深看synchronized的底层实现原理-1.jpg (91.72 KB, 下载次数: 0)2018-9-21 03:55 上传前言前俩篇文章&#xff0c;我们聊了聊线程/进程的概念&#xff0c;接着简单串了一下同步的体例体例。今天我们就单拎出来synchronized&#xff0c;好好捋一捋它…