展示PyEcharts图表到Django框架前端页面教程(逐步教程)

2023-11-07

官网教程参考:https://pyecharts.org/#/zh-cn/web_django?id=django-%e6%a8%a1%e6%9d%bf%e6%b8%b2%e6%9f%93

这篇博客与官网一样使用Ajax,不使用ajax,直接填充一个div的请参考:django填充pyechart的图到前端模版中(不使用Ajax,而是直接贴一个div)

官网教程版本不太对,这里重写一下,顺便解决官网一些规范性的问题

首先需要明确,pyechart是通过python来生成HTML(echart)的工具,在django中,则是通过Ajax填充

在流程中前三部分都是为了项目准备:

  • django老手直接到第3步
  • 新手则从头开始搭建一个django,并完成基本配置

PyEcharts + Django 流程

1. 安装依赖&创建项目

安装必要的依赖:

pip install django
pip install pyecharts
pip install djangorestframework

版本:

python		          3.7.13
Django                3.2.13
djangorestframework   3.13.1
pyecharts             1.9.1

然后创建django项目

django-admin startproject pyecharts_django_demo
cd pyecharts_django_demo/
python manage.py startapp demo

2. 调整项目结构

  1. 然后在pyecharts_django_demo/settings.py文件中,修改INSTALLED_APPS的配置,在文件中添加两个配置项:rest_framework与刚才创建的demo,最后的结果如下:
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    "rest_framework",
    "demo",
]
  1. 然后在这个配置INSTALLED_APPS的上面添加下面的代码,方便后续操作:
import os

SETTINGS_PATH = os.path.dirname(os.path.dirname(__file__))
  1. 最后修改配置项TEMPLATESDIRS,之前"DIRS"那里是个空列表,咱们要填一下,这是固定写法:
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(SETTINGS_PATH, 'templates')], # 说明你的HTML文件放在哪里,后面会添加这个文件夹,这里先配置上
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

3. 配置pyechart的图片路由(熟悉Django的直接到这里)

  1. demo/文件夹下新建一个urls.py文件,然后在新建的文件中写入:

    from django.urls import path
    from . import views
    
    urlpatterns = [
        path(r'^index/$', views.IndexView.as_view(), name='demo'),
        path(r'where_is_my_pic/', views.PicView.as_view(), name='my_pic'),
    ]
    

    这里咱们先把路径都配好,调通了之后再串逻辑

  2. 定位到项目根目录的url.py文件(在pyecharts_django_demo/urls.py即为项目根目录的urls文件):

    • 导包from django.urls import include
    • 添加主目录到demo的路由

最后修改完后的效果如下:

"""pyecharts_django_demo URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/3.2/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path(r'demo/', include('demo.urls'))
]

4. 准备呈现图像

在项目根目录下,与manage.py同一个目录下,创建一个templates文件夹(名字不要错,固定写法),之后的文件结构是:
在这里插入图片描述

  1. templates文件夹下创建一个index.html文件:
<!DOCTYPE html>
<html lang="en">
<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="my_piccccc" style="width:1000px; height:600px;"></div>
<script>
    var chart = echarts.init(document.getElementById('my_piccccc'), 'white', {renderer: 'canvas'});

    $(
        function () {
            fetchData(chart);
        }
    );

    function fetchData() {
        $.ajax({
            type: "GET",
            url: "http://127.0.0.1:8000/demo/where_is_my_pic", // 这个是请求后端的url
            dataType: 'json',
            success: function (result) {
                chart.setOption(result.data);
            }
        });
    }
</script>
</body>
</html>
  1. demo/view.py中写入:
import json
from random import randrange
from django.http import HttpResponse
from rest_framework.views import APIView
from pyecharts.charts import Bar
from pyecharts import options as opts
from django.shortcuts import render


# 下面的代码是AJAX的写法
def response_as_json(data):
    json_str = json.dumps(data)
    response = HttpResponse(
        json_str,
        content_type="application/json",
    )
    response["Access-Control-Allow-Origin"] = "*"
    return response


def 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_error


# 这是返回图片的写法
class PicView(APIView):
    def get(self, request, *args, **kwargs):
        my_pic = (
            Bar()
                .add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
                .add_yaxis("商家A", [randrange(0, 100) for _ in range(6)])
                .add_yaxis("商家B", [randrange(0, 100) for _ in range(6)])
                .set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="我是副标题"))
                .dump_options_with_quotes()
        )
        return JsonResponse(json.loads(my_pic))


# 这是显示页面的写法
class IndexView(APIView):
    def get(self, request, *args, **kwargs):
        return render(request, 'index.html', )

5. 查看效果

访问:http://127.0.0.1:8000/demo/

在这里插入图片描述

6. 照猫画虎的魔改代码

然后我们就可以照猫画虎的魔改代码了,只需要:

  1. 首先修改前端HTML的my_piccccc,这个名字自己定。其中一个出现在div中,一个出现在js的document.getElementById('my_piccccc')中,这两个要对应上
  2. 前端HTML中是通过js填充的,在函数fetchData中有一行url:xxxxx
function fetchData() {
        $.ajax({
            type: "GET",
            url: "http://127.0.0.1:8000/demo/where_is_my_pic", // 这个是请求后端的url
            dataType: 'json',
            success: function (result) {
                chart.setOption(result.data);
            }
        });
    }

这个与第三步中的配置pyechart的图片路由 一一对应
3. 在view.py中函数def get(self,request)写法固定,函数名不要改,内容随便,可以修改成任意图片,然后注意还要与url.py的路由对应上

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

展示PyEcharts图表到Django框架前端页面教程(逐步教程) 的相关文章

  • 如何在 __init__ 中使用await设置类属性

    我如何定义一个类await在构造函数或类体中 例如我想要的 import asyncio some code class Foo object async def init self settings self settings setti
  • 为什么 dataclasses.astuple 返回类属性的深层副本?

    在下面的代码中astuple函数正在执行数据类的类属性的深层复制 为什么它不能产生与函数相同的结果my tuple import copy import dataclasses dataclasses dataclass class Dem
  • 在 Celery 任务中调用 Google Cloud API 永远不会返回

    我正在尝试拨打外部电话Google Cloud Natural Language API从一个内Celery任务 使用google cloud python包裹 问题是对 API 的调用永远不会返回 挂起 celery task def g
  • 多输出堆叠回归器

    一次性问题 我正在尝试构建一个多输入堆叠回归器 添加到 sklearn 0 22 据我了解 我必须结合StackingRegressor and MultiOutputRegressor 经过多次尝试 这似乎是正确的顺序 import nu
  • NLTK 2.0分类器批量分类器方法

    当我运行此代码时 它会抛出一个错误 我认为这是由于 NLTK 3 0 中不存在batch classify 方法 我很好奇如何解决旧版本中的某些内容在新版本中消失的此类问题 def accuracy classifier gold resu
  • 从Django中具有外键关系的两个表中检索数据? [复制]

    这个问题在这里已经有答案了 This is my models py file from django db import models class Author models Model first name models CharFie
  • Python 3d 绘图设置固定色阶

    我正在尝试绘制两个 3d 数组 第一个数组的 z 值在范围内 0 15 0 15 第二个来自 0 001 0 001 当我绘图时 色标自动遵循数据范围 如何设置自定义比例 我不想看到 0 001 的浅色 而应该看到 0 15 的浅色 如何修
  • 更好地相当于这个疯狂的嵌套 python for 循环

    for a in map for b in map a for c in map b for d in map c for e in map d print a b c d e 上面的代码用于创建图中一定长度的所有路径 map a 表示从
  • Tensorboard SyntaxError:语法无效

    当我尝试制作张量板时 出现语法错误 尽管开源代码我还是无法理解 我尝试搜索张量板的代码 但不清楚 即使我不擅长Python 我这样写路径C Users jh902 Documents logs因为我正在使用 Windows 10 但我不确定
  • 打印数字时添加千位分隔符[重复]

    这个问题在这里已经有答案了 我真的不知道这个问题的 名称 所以它可能是一个不正确的标题 但问题很简单 如果我有一个数字 例如 number 23543 second 68471243 我想要它使print 像这样 23 54368 471
  • 导入错误:没有名为flask.ext.login的模块

    我的flask login 模块有问题 我已经成功安装了flask login模块 另外 从命令提示符我可以轻松运行此脚本 不会出现错误 Python 2 7 r27 82525 Jul 4 2010 07 43 08 MSC v 1500
  • 无法导入 langchain.agents.load_tools

    我正在尝试使用 LangChain Agents 但无法导入 load tools 版本 langchain 0 0 27 我尝试过这些 from langchain agents import initialize agent from
  • 当字段是数字时怎么说...在 mongodb 中匹配?

    所以我的结果中有一个名为 城市 的字段 结果已损坏 有时它是一个实际名称 有时它是一个数字 以下代码显示所有记录 db zips aggregate project city substr city 0 1 sort city 1 我需要修
  • Pandas 组合不同索引的数据帧

    我有两个数据框df 1 and df 2具有不同的索引和列 但是 有一些索引和列重叠 我创建了一个数据框df索引和列的并集 因此不存在重复的索引或列 我想填写数据框df通过以下方式 for x in df index for y in df
  • Protobuf 如何编码 oneof 消息结构

    对于这个 python 程序 在编码时运行 protobuf 编码会给出以下输出 0a 10 08 7f8a 0104 08 02 10 0392 0104 08 02 10 03 18 01 我不明白的是为什么8a后面有一个01 为什么9
  • django 迁移地狱,丢了一张表。试图把它找回来

    所以我在数据库中删除了一个表 并且希望将其恢复 重新运行迁移会出现错误表不存在 经过一番搜寻后 我了解到我可以删除 django migrations 中应用程序名为我的应用程序的所有内容 所以我这样做了 重新运行迁移 它开始工作 然后抱怨
  • 制作一份 Python 文档的 PDF 文件

    Python 官方网站提供 PDF 文档下载 但它们是按章节分隔的 我下载了源代码并构建了 PDF 文档 这些文档也是单独的 PDF 我怎么能够从源代码中的 Makefile 构建一个 PDF 文件 我认为这样阅读起来会更方便 如果连接单独
  • 等待子进程使用 os.system

    我用了很多os system在 for 循环内调用创建后台进程 如何等待所有后台进程结束 os wait告诉我没有子进程 ps 我使用的是Solaris 这是我的代码 usr bin python import subprocess imp
  • 如何使用 PrimaryKeyRelatedField 更新多对多关系上的类别

    Django Rest 框架有一个主键相关字段 http www django rest framework org api guide relations primarykeyrelatedfield其中列出了我的 IDmany to m
  • 如何在 Flask 中的视图函数/会话之间传递复杂对象

    我正在编写一个 Web 应用程序 当 且仅当 用户登录时 该应用程序从第三方服务器接收大量数据 这些数据被解析为自定义对象并存储在list 现在 用户在应用程序中使用这些数据 调用不同的视图 例如发送不同的请求 我不确定什么是最好的模式在视

随机推荐

  • Eclipse的两个JS插件安装及配置EXT支持

    JSEclipse 在线安装 JSEclipse是个Eclipse下的免费Javascript脚本编辑器 最大的特点就是对js的自动完成功能非常完美 在Eclipse中如何安装JSEclipse 在http www interaktonli
  • 详解union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=‘ ‘--+

    此文章是记录本人对知识理解的随手笔记 内容不肯定百分百正确 如有错误望指出并谅解 1 group concat函数是将查询到的每行结果以某个字段名进行合并 每一行合并的结果以逗号分隔开 可以结合以下例子理解 下图是没使用group conc
  • gym 自己环境搭建

    http t csdn cn ILs89http t csdn cn ILs89发现gym envs文件夹下的 init 可以不加from import 只需要注册相应文件夹下的自己的环境就好 值得注意的 需要指定好文件路径 gym env
  • 20230816 图像处理

    1 2022 图像检索资料总结 知乎 2 高斯金字塔与拉普拉斯金字塔的原理与python构建 3 一篇文章为你讲透双线性插值 知乎 4 图像处理基础 图像滤波 知乎 5 高斯分布的应用 高斯分布实际用途 又要起名字了的博客 CSDN博客 6
  • Android 实现护眼模式

    一 背景 在阅读软件或者儿童软件都需要护眼模式来降低蓝光的辐射 二 实现方案 首先在每个activity创建的时候在最上层添加一层view 去掉点击事件 用sp或者mmkv来存储当前是否打开护眼模式 在每次activity onresume
  • 二.基于nodejs express multer 上传图片功能实现+详细说明_番茄出品

    START 前几天熬夜做了一个基于nodejs的后端服务 连接mysql数据库搞定了 但是最近遇到上传图片一个需求 这如何实现呢 别着急 番茄带你一点一点实现 本文作者 lazy tomato 编写时间 2022 03 31 22 21 前
  • Linux教程:YUM与开源项目实战(Web运维)

    1 了解Linux软件的安装方式 2 掌握更新yum源 3 掌握YUM软件安装方式 4 了解LAMP环境以及AMP的关系 5 了解阿里云ECS的创建过程 6 能够yum方式搭建lamp环境 7 能够实现Discuz 论坛部署 8 能够购买域
  • Django入门教程

    Django入门教程 创建Django项目 django admin startproject mysite 这将在目录下生成一个mysite目录 也就是你的这个Django项目的根目录 它包含了一系列自动生成的目录和文件 具备各自专有的用
  • 聊聊FFT(二)----幅值、模值与分辨率

    以常见的家用交流220V 以下称AC220V 工频电信号为例 大家都知道家里的插座内有220V的电 可以给电饭锅 热水壶 空调冰箱等等电器供电 至于220V具体指的是什么可能非理工科背景的同学没有深究过 有效值又称 均方根值 一种用以计量交
  • 使用docker安装我们的ES启动时的异常解决

    一开始我启动失败 我一直是以为我们的内存大小分配的问题 es默认启动占用内存是2g docker run e ES JAVA OPTS Xms256m Xmx256m id p 1001 1001 p 9301 9301 v home es
  • CSDN周赛62期反馈及简要题解

    持续了十期的 计算之魂 主题周赛告一段落 可能上周就已经告一段落了 以致于也出现了重复的考题 这本书确实不错 里面提到的计算机思维我认为是理解和学习计算机科学的基础 第一次读此书的时候就一口气读到第八章 读到精彩之处 不禁拍案叫绝 在此也强
  • 三、Esp32引脚资源详细

    三 Esp32引脚资源详细 文章目录 三 Esp32引脚资源详细 3 1 仅输入引脚 3 2 SPI闪存 3 3 电容式触摸GPIO 3 4 模数转换器 ADC 3 5 数模转换器 DAC 3 6 RTC GPIOs 3 7 脉冲宽度调制
  • HashMap的面试题

    目录 1 底层数据结构 1 7和1 8有何不同 2 为什么用红黑树 为何不一上来就树化 树化阈值为何是8 何时会树化 何时会退化为链表 3 索引如何计算 hashCode都有了 为何还要提供hash 方法 数组容量为何是2的n次幂 4 Ha
  • C语言,使用指针计算每行最大值,每列最小值 ,void Max(int (*p)[],int line,int row) ,void Min(int (*p)[],int line,in

    使用指针计算每行最大值 每列最小值 void Max int p int line int row void Min int p int line int row include
  • Pandas基础(全)

    Pandas基础 全 引言 Pandas是基于Numpy的库 但功能更加强大 Numpy专注于数值型数据的操作 而Pandas对数值型 字符串型等多种格式的表格数据都有很好的支持 关于Numpy的基础知识 请查看 Numpy基础 全 内容介
  • 三相LCL变流器PR控制仿真及验证

    三相变流器 可单位功率因数整流 实现母线电压的泵升 可逆变并网实现能量回馈 它是一个三相AC DC双向电源 基于三相全控型半桥的双向变流器可用于很多领域 1 中大功率变频传动领域 例如电梯 可用于电梯下降过程中的能量回馈 大大节省电能 电梯
  • 网上传说软件测试培训真的那么黑心吗?都是骗局?

    今天一大早社区群因为 软件测试培训班靠不靠谱 的话题炸开了锅 就客观事实而言 当下的软件测试早已不复当年的混乱 再想说0基础进入软测行业 靠着一路摸爬滚打在工作中从无到有学会软测 如果没有贵人扶持 怕是万难 据相关调查数据显示 有79 53
  • windows server 2008 r2 搭建文件服务器

    windows server 2008 r2 搭建文件服务器 目的需求 在测试环境下模拟公司现状需求 利用windows server 搭建文件服务器 工具必备 1 vmware workstation 2 windows server 2
  • 图像处理中的卷积

    卷积是积分变换的方法 其在许多方面有广泛应用 卷积通过两个函数 f 和 g 生成第三个函数 可以看作是两个变量在某范围内相乘后求和的结果 设 f x g x 是两个可积函数 作积分 可以证明上述积分的存在性 随着x取值的不同 这个积分就定义
  • 展示PyEcharts图表到Django框架前端页面教程(逐步教程)

    官网教程参考 https pyecharts org zh cn web django id django e6 a8 a1 e6 9d bf e6 b8 b2 e6 9f 93 这篇博客与官网一样使用Ajax 不使用ajax 直接填充一个