Django +pyecharts 完成前后端分离Demo

Step 0: 新建一个 Django 项目

$ django-admin startproject pyecharts_django_demo                               

创建一个应用程序

$ python manage.py startapp demo

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

# pyecharts_django_demo/settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'demo',  # <--- app 名称
    'rest_framework',
]

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

from django.contrib import admin
from django.urls import path
from django.conf.urls import url, include

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

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

from django.conf.urls import url
from . import views

urlpatterns = [
    path('bar', views.ChartView.as_view(), name='demo'),
    path('index', views.IndexView, name='demo'),
]

Step 2 编写画图 HTML 代码
先在根目录文件夹下新建 templates 文件夹,新建一个 index.html

sunhailindeMacBook-Pro:pyecharts_django_demo sunhailin$ ls
__pycache__   db.sqlite3   demo   manage.py  pyecharts_django_demo  templates

以下为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:1000px; height:600px;"></div>
    <script>
        var chart = echarts.init(document.getElementById('bar'), 'white', {renderer: 'canvas'});

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

        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>

Step 3: 编写 Django 和 pyecharts 代码渲染图表
注: 目前由于 json 数据类型的问题,无法将 pyecharts 中的 JSCode 类型的数据转换成 json 数据格式返回到前端页面中使用。因此在使用前后端分离的情况下尽量避免使用 JSCode 进行画图。

将下列代码保存到 demo/views.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


# 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 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


def bar_base() -> Bar:
    c = (
        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 c


class ChartView(APIView):
    def get(self, request, *args, **kwargs):
        return JsonResponse(json.loads(bar_base()))

#这里对官网Demo做了修改,因为按照官网示例,我运行会报错
class IndexView(request):
        return HttpResponse(content=open("./templates/index.html").read())

Step 4: 运行项目

$ python manage.py runserver

使用浏览器打开 http://127.0.0.1:8000/demo/index 即可访问服务

效果图
PS:代码引用官方文档示例,地址为:https://pyecharts.org/#/zh-cn/web_django?id=django-%e5%89%8d%e5%90%8e%e7%ab%af%e5%88%86%e7%a6%bb

Demo下载链接:点击下载

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
要实现 Django + Pyecharts + MySQL 前后端分离,需要按照以下步骤进行: 1. 后端 Django + MySQL 的实现 首先,根据需求设计数据库表结构,并使用 Django 自带的 ORM 操作数据库。在 Django 中,可以使用 Django REST framework 进行 API 接口的开发,将数据以 JSON 或 XML 格式返回前端。 2. 前端 Pyecharts 的实现 在前端页面中,使用 Pyecharts 进行图表的绘制。Pyecharts 是一个基于 Echarts 的 Python 图表库,可以轻松绘制各种类型的图表。需要注意的是,Pyecharts 并不是一个前端框架,而是一种将 Python 代码转换成 JavaScript 代码的工具。 3. 前后端分离的实现 在前后端分离的架构中,前端和后端是分离的两个部分,通过 API 接口进行通信。在 Django 中,可以使用 Django REST framework 进行 API 接口的开发,并将数据以 JSON 格式返回前端前端通过 AJAX 调用这些 API 接口,获取数据并绘制图表。 4. 部署 最后,需要将 Django 后端和前端页面部署到不同的服务器上,以实现前后端分离。可以使用 Docker 进行部署,将 Django 应用和前端页面分别打包成 Docker 镜像,并使用 Docker Compose 进行部署管理。 总的来说,实现 Django + Pyecharts + MySQL 前后端分离需要对 DjangoPyecharts、MySQL、Django REST framework 等技术有一定的了解和实践经验。同时,需要注意前后端分离架构的设计和实现,以确保系统的稳定性和可扩展性。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值