Django和Highcharts - 生成图表,仍然是DRY?

时间:2012-03-09 01:24:47

标签: ajax django json charts highcharts

我目前正在制作一个非常依赖图形和图表的服务器仪表板。

我在后端使用Django,在图表中使用Highcharts / Highstock(http://www.highcharts.com/)(尽管我们也在考虑D3,具体取决于进展情况)。

我的问题是,生成所有图表的好方法是什么,仍然保持干燥状态?

(我知道Django-Chartit,但它对我们的目的有点限制,并没有为我们提供一些我们需要的可定制性。)

1。如何检索数据

首先,我最好为JavaScript内部的图形编码数据。 E.g:

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调用检索所有数据 - 例如JSON通过Query.get()

2。动态生成Javascript

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

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

第3。使用AJAX的安全性/性能

如果我们在选项2中关闭JSON / AJAX路由 - 在一个页面上发出20个JQuery.get()个呼叫会有性能问题吗?我不知道有什么方法可以批量处理它们吗?

那么安全性 - 我们只想将AJAX端点暴露给图表,但是你怎么能允许这样做但不让任何人直接调用那个URL?

4。 DRY

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

减少这种情况的最佳方法是什么?图表的模板标签?或者有更聪明的方法吗?

干杯, 维克多

1 个答案:

答案 0 :(得分:2)

  1. 取决于数据的大小。如果你有大型数据集而不需要立即显示所有图表 - 当然你应该使用AJAX。否则,编码成js是可以的。
  2. 您可以添加一些网址,例如/data/some_data.js,这些网址将由Django呈现(有或没有模板系统)并在该文件中提供数据。下面将调用Highcharts脚本并使用该数据。
  3. 如果您使用ajax,您可以采用相同的方式 - 检索一大包数据(例如,使用哈希数组),然后一次使用一部分数据创建图表。出于安全原因,您可以在此处使用Django的CSRF - 创建一个仅包含令牌的空表单,并将其与请求一起发布。在服务器端,您只需要拒绝GET访问该URL,使用基于类的视图或对request.method进行简单检查。
  4. 如果您使用一个数据包,可以在那里添加块ID,标题和其他元数据,并在使用JS实例化图表时使用它。