2012-03-09 62 views
4

我目前正在製作一個服務器儀表板,它非常依賴圖表和圖表。Django和Highcharts - 生成圖表,仍然是乾的?

我在後端使用Django,圖表使用Highcharts/Highstock(http://www.highcharts.com/)(儘管我們也在看着D3,取決於如何進展)。

我的問題是,什麼是產生我們的所有圖形的好方法,並仍然保持乾燥?

(我知道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調用檢索所有數據 - 例如: JSON通過Query.get()

2.生成JavaScript動態

如果我們去選項1,直接將數據編碼成JavaScript的,我怎麼生成的JavaScript文件動態?

目前,我們的JS是直接通過我們的網絡服務器(Nginx的)服務。或者我應該在我的HTML文件中使用內聯<script>標籤?與AJAX

3.安全/性能如果我們再往選項2的JSON/AJAX路線 - 會不會有性能問題,使說在一個頁面上20個JQuery.get()電話?我不知道有什麼方法可以批量處理它們?

又是怎麼回事安全 - 我們想只露出AJAX端點的圖表,但你怎麼能允許但不能讓任何人作出該URL直接調用?

4.幹

無論哪種方式,我發現我們有重複的堆載有所有這些圖表。

削減這個最好的方法是什麼?圖表的模板標籤?還是有更聰明的方法?

乾杯, 維克多

回答

2
  1. 取決於數據的大小。如果你有大數據集並且不需要立即顯示所有圖表 - 當然你應該使用AJAX。否則,編碼成js是可以的。
  2. 你可以添加一些網址,像/data/some_data.js將由Django的(有或無模板系統)來呈現,並提供數據的文件。 Highcharts腳本將在下面調用並使用該數據。
  3. 如果使用AJAX,你可以把它同樣的方式 - 檢索數據的一個大包(使用哈希陣列,例如)和使用數據的一部分在時間oone,創造你的圖表一個後。出於安全原因,您可以在這裏使用Django的CSRF - 創建一個只有令牌的空表單,並將其與請求一起發佈。在服務器端,您只需要拒絕對該URL的GET訪問,使用基於類的視圖或者request.method的普通檢查。
  4. 如果您使用一包數據,您可以在其中添加塊ID,標題和其他元數據,並在使用JS實例化圖表時使用它。