博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
当Django遇上Pyecharts将碰撞出怎样的火花……
阅读量:4129 次
发布时间:2019-05-25

本文共 4185 字,大约阅读时间需要 13 分钟。

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

Django 模板渲染

1. 新建一个 Django 项目

命令行中输入以下命令

django-admin startproject pyecharts_django_demo

创建一个应用程序

python manage.py startapp demo

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

2020-11-06_153700.png

同时在 pyecharts_django_demo/settings.py 中注册应用程序

INSTALLED_APPS 中添加应用程序 demo

pyecharts_django_demo/urls.py 中新增 demo.urls

2. 新建项目 urls 文件

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

from django.conf.urls import urlfrom . 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 jsonfrom random import randrangefrom django.http import HttpResponsefrom rest_framework.views import APIViewfrom pyecharts.charts import Bar, Piefrom pyecharts.faker import Fakerfrom 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_responseJsonError = 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 文件

代码如下:

    
Awesome-pyecharts

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

定时全量更新图表

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

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

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

    
Awesome-pyecharts

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

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'),]

运行之后,效果如下:

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

定时增量更新图表

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

    
Awesome-pyecharts

细心的你应该可以发现,里面新增了两个请求地址 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 line_base() -> Line:    line = (        Line()            .add_xaxis(["{}".format(i) for i in range(10)])            .add_yaxis(            series_name="",            y_axis=[randrange(50, 80) for _ in range(10)],            is_smooth=True,            label_opts=opts.LabelOpts(is_show=False),        )            .set_global_opts(            title_opts=opts.TitleOpts(title="动态数据"),            xaxis_opts=opts.AxisOpts(type_="value"),            yaxis_opts=opts.AxisOpts(type_="value"),        )            .dump_options_with_quotes()    )    return lineclass ChartView(APIView):    def get(self, request, *args, **kwargs):        return JsonResponse(json.loads(line_base())cnt = 9class ChartUpdateView(APIView):    def get(self, request, *args, **kwargs):        global cnt        cnt = cnt + 1        return JsonResponse({
"name": cnt, "value": randrange(0, 100)})

运行并打开,效果如下:

后台回复 django 获取代码!

转载地址:http://pkzvi.baihongyu.com/

你可能感兴趣的文章
如何使用BBC英语学习频道
查看>>
spring事务探索
查看>>
浅谈Spring声明式事务管理ThreadLocal和JDKProxy
查看>>
初识xsd
查看>>
java 设计模式-职责型模式
查看>>
构造型模式
查看>>
svn out of date 无法更新到最新版本
查看>>
java杂记
查看>>
RunTime.getRuntime().exec()
查看>>
Oracle 分组排序函数
查看>>
删除weblogic 域
查看>>
VMware Workstation 14中文破解版下载(附密钥)(笔记)
查看>>
日志框架学习
查看>>
日志框架学习2
查看>>
SVN-无法查看log,提示Want to go offline,时间显示1970问题,error主要是 url中 有一层的中文进行了2次encode
查看>>
NGINX
查看>>
Qt文件夹选择对话框
查看>>
1062 Talent and Virtue (25 分)
查看>>
1061 Dating (20 分)
查看>>
1060 Are They Equal (25 分)
查看>>