如何在Django中开始使用Chart.js

390 阅读5分钟

在Django中开始使用Chart.js

Chart.js是一个开源的基于HTML5的JavaScript库,用于在HTML5画布上渲染图表。通过Chart.js,你可以使用多种图表来实现数据的可视化,比如线图、条形图、散点图等等。

现在有几个用于数据可视化的库,如[Django Highcharts]和[Plotly.js]。

为什么选择Chart.js?

Chart.js相当灵活,易于设置。另外,你可以从大约八种不同的图表类型中选择。这个项目在GitHub上有超过55K颗星。与其他库相比,开发者们更喜欢Chart.js,因为。

  • 图表是动画的。
  • 图表是可定制的。
  • Chart.js包含几个扩展,用于提高交互性。

在本教程中,我们将通过建立一个简单的项目来研究如何在Django中集成Chart.js。

前提条件

要继续学习本教程,你需要在你的机器上安装[Python3]。

对Django有一点了解将有助于读者更好地跟上。

创建和设置一个新的Django项目

让我们从创建一个新的虚拟环境开始。

虚拟环境允许你在你的电脑上创建一个虚拟空间。

通过创建一个虚拟环境,你将能够为一个项目分开安装必要的库,而不需要全局安装它们。

现在,通过运行下面的命令创建一个虚拟环境env

python -m venv env

在这里,我们告诉 Python 在当前目录下一个名为env 的文件夹中创建虚拟环境。

创建后,使用下面的命令激活虚拟环境。

source env/bin/activate

激活环境后,使用下面的命令安装Django。

pip install django

现在,让我们创建一个新的Django项目Django-charts ,使用。

django-admin startproject Django-charts

然后,导航到Django-charts 目录并创建一个Django应用程序。

cd Django-charts
django-admin startapp charts

让我们把我们的应用程序添加到已经安装的应用程序列表中。

导航到Django-charts 目录并编辑settings.py 文件。

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'editors',
]

创建一个模型

Django中的模型是一个代表单个表或数据库的类。它可以用来动态加载数据到一个项目中。

在本教程中,我们将学习如何创建一个图表,将不同文本编辑器的使用趋势可视化。

对于我们的模型,我们将创建两个字段:用户字段num_users 和文本编辑器字段editor_name

editors 目录下,在models.py 文件中复制并粘贴以下代码。

from django.db import models

#defining a simple class
class Editors(models.Model):
    editor_name = models.CharField(max_length=200)
    num_users = models.IntegerField()

    def __str__(self):
        return "{}-{}".format(self.editor_name, self.num_users) 

现在,让我们在admin.py 文件中注册模型Editors ,这样我们就可以在Django管理部分修改它。

from django.contrib import admin
from .models import Editors

admin.site.register(Editors)

接下来,我们需要将我们的模型迁移到数据库中。

迁移是Django将你对模型所做的修改发布到数据库模式的方式。因此,当创建一个新的模型时,我们迁移到数据库中创建所需的表。

接下来,我们通过运行下面的命令来迁移我们的模型。

python manage.py makemigrations # migrating the app and database changes
python manage.py migrate        # final migrations

一个超级用户拥有在Django管理中创建、编辑、更新和删除数据的权限。

通过运行下面的命令创建一个超级用户。

python manage.py createsuperuser 

现在,我们可以登录到管理页面了。

要登录到管理区,请再次为应用程序提供服务,进入http://localhost:8000/admin ,用你的超级用户凭证登录。

Django admin login page

Django管理员登录页面

Django admin page

Django管理页面

现在,让我们在Editors 类别中添加一个编辑器,以测试它是否没有错误。

点击编辑器,然后点击Add Editor ,添加一个编辑器。

Add Editor

添加编辑器

创建一个视图

Django中的视图基本上是一个接受网络请求并返回网络响应的函数。

网络响应可以是一个错误页面、重定向、图片,甚至是HTML内容。

现在,让我们通过在我们的view.py 文件中添加以下内容来创建一个视图。

from django.shortcuts import render
from django.views.generic import TemplateView
from .models import Editors

# Creating views
class EditorChartView(TemplateView):
    template_name = 'editors/chart.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context["qs"] = Editors.objects.all()
        return context

我们还没有创建我们的chart.html 文件。

让我们通过在我们的editors 目录中创建一个模板文件夹来创建它。该文件目录应该看起来像templates/editors/chart.html

创建模板

我们首先在我们的基本目录中创建一个模板目录。这个模板目录将存放我们的base.html 文件。

base.html 它基本上是应用程序中所有页面的骨架。

我们应该有这样的东西:django-charts/templates/base.html

接下来,我们在base.html 文件中添加以下几行代码。

<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <!--Chart js-->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.8.0/Chart.min.js" integrity="sha256-Uv9BNBucvCPipKQ2NS9wYpJmi8DTOEfTA/nH2aoJALw=" crossorigin="anonymous"></script>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.8.0/Chart.min.css" integrity="sha256-aa0xaJgmK/X74WM224KMQeNQC2xYKwlAt08oZqjeF0E=" crossorigin="anonymous" />
    <!-- jQuery -->
    <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>

    <title>Text-Editor/IDE Charts</title>
  </head>
  <body>
   {%block scripts%}
   {%endblock scripts%}

   {%block content%}   
   {%endblock content%}   

  </body>
</html>

接下来,我们需要将DIRS 更新为我们的settings.py 文件中的模板文件夹的路径。

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        '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',
            ],
        },
    },
]

现在,打开我们先前创建的chart.html 文件,添加以下代码。

{% extends 'base.html'%}

{%block scripts%}
<script>
// jquery function
$(document).ready(function(){
        var ctx = document.getElementById('myChart').getContext('2d');
        var myChart = new Chart(ctx, {
            type: 'doughnut',
            data: {
                labels: [{%for data in qs%}'{{data.editor_name}}',{%endfor%}] //loop through queryset, 
                datasets: [{
                    label: '# of users',
                    data: [{%for data in qs%}{{data.num_users}},{%endfor%}],
                    backgroundColor: [
                        'rgba(255, 99, 132, 0.2)', 
                        'rgba(54, 162, 235, 0.2)',
                        'rgba(255, 206, 86, 0.2)',
                        'rgba(75, 192, 192, 0.2)',
                        'rgba(153, 102, 255, 0.2)',
                        'rgba(255, 159, 64, 0.2)'
                    ],
                    borderColor: [
                        'rgba(255, 99, 132, 1)',
                        'rgba(54, 162, 235, 1)',
                        'rgba(255, 206, 86, 1)',
                        'rgba(75, 192, 192, 1)',
                        'rgba(153, 102, 255, 1)',
                        'rgba(255, 159, 64, 1)'
                    ],
                    borderWidth: 1
                }]
            },
            options: {
                scales: {
                    y: {
                        beginAtZero: true
                    }
                }
            }
});
    });
</script>
{%endblock scripts%}

{%block content%}
<!-- displaying the chart -->
<!-- you can also play around with the width and height to increase or decrease the chart size -->
<canvas id="myChart" width="400" height="100"></canvas>  
{%endblock content%}

在上面的代码中,我们正在用从后台传来的数据替换样本数据。

接下来,我们编辑我们的urls.py ,添加以下代码。

from django.contrib import admin
from django.urls import path
from editors.views import EditorChartView

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', EditorChartView.as_view(), name='index')
]

现在,让我们为我们的Django管理员添加几个文本编辑器和一些用户。

Editors

添加新的文本编辑器

让我们用以下命令启动服务器来测试一下。

python manage.py runserver 

chart

显示饼状图

结论

最后,我们已经了解了Chart.js。我们还学习了如何在Django应用程序中整合图表。

在本教程中,我们学习了如何使用doughnut 图表类型。你还可以使用其他的图表类型。