Django和Highcharts - 生成图表,同时保持DRY?

4
我目前正在制作一个服务器仪表板,其中使用了许多图表和图形。
我在后端使用Django,并使用Highcharts/Highstock (http://www.highcharts.com/) 来生成图表(尽管我们也在关注D3,具体取决于其进展情况)。
我的问题是,有没有好的方法来生成所有的图表,并仍然保持DRY(Don't Repeat Yourself)?
(我知道有Django-Chartit,但它对我们的目的有些局限性,不能提供我们需要的某些自定义功能。) 1. 如何检索数据 首先,我应该将用于图表的数据编码在JavaScript本身中吗?例如:
series: [{
    name: 'Virtualised',
    data: [80, 81, 84, 84, 85, 80, 90, 85, 80, 88, 89, 90]
    }, {
    name: 'Physical',
    data: [15, 14, 12, 8, 10, 12, 12, 14, 10, 12, 8, 9]
    }]

我应该通过AJAX调用来检索所有数据吗?例如,使用Query.get()返回JSON数据?

2. 动态生成JavaScript

如果我们选择选项1并将数据直接编码到JavaScript中,那么我如何动态生成这些JavaScript文件?

目前,我们的JS是由Web服务器(NGinx)直接提供的。或者我应该在HTML文件中使用内联<script>标签?

3. AJAX的安全性/性能

如果我们选择选项2,即JSON / AJAX路线-在一个页面上进行20个JQuery.get()调用是否会有性能问题?我不知道是否有方法可以将它们全部批处理?

那么安全性呢?我们希望只向图表公开AJAX端点,但您如何允许这样做而不让任何人直接调用该URL?

4. DRY(Don't Repeat Yourself)

无论哪种方式,我都注意到我们有大量重复的所有这些图表。

有什么最好的方法来减少这一点?针对图表的模板标签?还是有更聪明的方法?

谢谢, 维克多

1个回答

2
  1. 根据数据的大小而定。如果您有大型数据集并且不需要立即显示所有图表,则应该使用AJAX。否则,编写js代码就可以了。
  2. 您可以添加一些类似于/data/some_data.js的URL,这些URL将由Django(带或不带模板系统)呈现,并在文件中提供数据。 Highcharts脚本将在下面调用并使用该数据。
  3. 如果您使用ajax,可以采用同样的方式-检索一个大数据包(例如使用哈希数组),然后逐个创建图表,每次只使用一部分数据。出于安全原因,您可以在此处使用Django的CSRF-创建一个仅包含令牌的空表单,并使用请求进行POST。在服务器端,您只需要拒绝对该URL的GET访问,使用基于类的视图或纯请求方法检查即可。
  4. 如果您使用一个数据包,可以在其中添加块ID、标题和其他元数据,并在实例化JS时使用它们来创建图表。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接