为项目新建一个目录,将其命名为django_pyecharts_demo,
在终端中切换到这个目录,并创建一个虚拟环境。
python -m venv django_pyecharts
激活虚拟环境
django_pyecharts\Scripts\activate
要停止使用虚拟环境,可执行命令
deactivate
创建并激活虚拟环境后,就可安装Django
(django_pyecharts)learning_log$ pip install Django pyecharts
Django仅在虚拟环境处于活动状态时才可用。
查看已安装的python库,pip list。
(django_pyecharts) PS E:\python_work\Django\django_pyecharts> pip list
Package Version
------------------- -------
asgiref 3.8.1
Django 5.0.3
djangorestframework 3.15.1
Jinja2 3.1.3
MarkupSafe 2.1.5
pip 22.3
prettytable 3.10.0
pyecharts 2.0.5
setuptools 65.5.0
simplejson 3.19.2
sqlparse 0.4.4
tzdata 2024.1
wcwidth 0.2.13
新建一个项目
django-admin startproject pyecharts_django_demo .
千万别忘了这个句点,否则部署应用程序时将遭遇一些配置问题。如果忘记了这个句点,要删除已创建的文件和文件夹(django_pyecharts除外),再重新运行这个命令。
Django将大部分与项目相关的信息存储在数据库中,因此需要创建一个供Django使用的数据库。
python manage.py migrate
核实Django是否正确地创建了项目。为此,可执行命令runserver。
python manage.py runserver
显示
Starting development server at http://127.0.0.1:8000/
等同
http://localhost:8000/
若要关闭这个服务器,可切换到执行命令runserver 时所在的终端窗口,再按Ctrl + C即可。
如果出现错误消息That port is already in use(指定端口被占用),请执行命令
python manage.py runserver 8001
让Diango使用另一个端口。
在前面打开的终端窗口中应该还运行着runserver。
请再打开一个终端窗口(或标签页),并切换到manage.py所在的目录。激活该虚拟环境,
django_pyecharts\Scripts\activate
再执行命令startapp:
python manage.py startapp demo
在 pyecharts_django_demo/settings.py 中注册应用程序。
# pyecharts_django_demo/settings.py
INSTALLED_APPS = ['demo','django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles',
]
编辑 demo/urls.py 文件
# demo/urls.py
from django.urls import include
from django.urls import re_path as url
from . import viewsurlpatterns = [url(r'^$', views.index, name='index'),
]
在 pyecharts_django_demo/urls.py 中新增 ‘demo.urls’
from django.contrib import admin
from django.urls import path
from django.urls import include
from django.urls import re_path as urlurlpatterns = [path('admin/', admin.site.urls),url(r'^demo/', include('demo.urls'))
Step 1: 拷贝 pyecharts 模板
先在 demo 文件夹下新建 templates 文件夹,
将 pyecharts 模板,位于 pyecharts.render.templates 拷贝至刚新建的 templates 文件夹,
Step 2: 渲染图表
将下列代码保存到 demo/views.py 中。
from jinja2 import Environment, FileSystemLoader
from pyecharts.globals import CurrentConfig
from django.http import HttpResponseCurrentConfig.GLOBAL_ENV = Environment(loader=FileSystemLoader("./demo/templates"))from pyecharts import options as opts
from pyecharts.charts import Bardef index(request):c = (Bar().add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]).add_yaxis("商家A", [5, 20, 36, 10, 75, 90]).add_yaxis("商家B", [15, 25, 16, 55, 48, 8]).set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="我是副标题")))return HttpResponse(c.render_embed())
Step 3: 运行项目
python manage.py runserver
使用浏览器打开 http://127.0.0.1:8000/demo 即可访问服务
Django 前后端分离
Step 0: 建立文件夹、虚拟环境等,前几步同上。
Step 1: 新建一个 Django 项目
django-admin startproject pyecharts_django_demo .
python manage.py migrate
python manage.py startapp demo
在 pyecharts_django_demo/settings.py 中注册应用程序
# pyecharts_django_demo/settings.py
INSTALLED_APPS = ['demo', # <--- app 名称'rest_framework','django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles',
]
在 pyecharts_django_demo/urls.py 中新增 ‘demo.urls’
# pyecharts_django_demo/urls.py
from django.contrib import admin
from django.urls import path
from django.urls import include
from django.urls import re_path as urlurlpatterns = [path('admin/', admin.site.urls),url(r'^demo/', include('demo.urls'))
]
编辑 demo/urls.py 文件(没有就新建一个)
from django.urls import include
from django.urls import re_path as url
from . import viewsurlpatterns = [url(r'^bar/$', views.ChartView.as_view(), name='demo'),url(r'^index/$', views.IndexView.as_view(), name='demo'),
]
Step 2 编写画图 HTML 代码
先在根目录文件夹下新建 templates 文件夹,新建一个 index.html
(django_pyecharts) PS E:\python_work\Django\django_pyecharts_demo> ls目录: E:\python_work\Django\django_pyecharts_demoMode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2024/3/24 14:08 demo
d----- 2024/3/24 9:43 django_pyecharts
d----- 2024/3/24 14:06 pyecharts_django_demo
d----- 2024/3/24 9:53 templates
-a---- 2024/3/24 9:45 131072 db.sqlite3
-a---- 2024/3/24 9:45 699 manage.py
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 中
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
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 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 cclass ChartView(APIView):def get(self, request, *args, **kwargs):return JsonResponse(json.loads(bar_base()))class IndexView(APIView):def get(self, request, *args, **kwargs):return HttpResponse(content=open("./templates/index.html").read())
Step 4: 运行项目
python manage.py runserver
使用浏览器打开 http://127.0.0.1:8000/demo/index 即可访问服务。