Django и Highcharts - Создание диаграмм и все еще СУХОЙ? - PullRequest
4 голосов
/ 09 марта 2012

В настоящее время я делаю приборную панель сервера, которая довольно сильно опирается на графики и диаграммы.

Я использую 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). Или я должен использовать встроенный тег <script> внутри моих файлов HTML?

3. Безопасность / Производительность с AJAX

Если мы перейдем к варианту 2 по маршруту JSON / AJAX - возникнут ли проблемы с производительностью, скажем, 20 JQuery.get() вызовов на одной странице? Я не знаю ни одного способа их всех пакетировать?

А как насчет безопасности - мы хотели бы предоставить конечной точке AJAX только графики, но как вы можете разрешить это, но не позволять кому-либо делать прямой вызов этого URL?

4. DRY

В любом случае, я заметил, что у нас есть куча повторений со всеми этими диаграммами.

Какой лучший способ сократить это? Шаблон-теги для диаграмм? Или есть более разумный способ?

Ура, Victor

1 Ответ

2 голосов
/ 10 марта 2012
  1. Зависит от размера данных. Если у вас большие наборы данных и вам не нужно показывать сразу все графики - обязательно используйте AJAX. В противном случае кодирование в js нормально.
  2. Вы можете добавить некоторые URL, например /data/some_data.js, которые будут отображаться Django (с системой шаблонов или без нее) и предоставлять данные в этих файлах. Скрипты Highcharts будут вызываться ниже и использовать эти данные.
  3. Если вы используете ajax, вы можете сделать это таким же образом - получить один большой пакет данных (например, с использованием хеш-массива), а затем создать диаграммы по одному, используя одну часть данных за раз. По соображениям безопасности вы можете использовать CSRF Django здесь - создайте пустую форму, содержащую только токен, и отправьте ее с запросом. На стороне сервера вам просто нужно запретить GET доступ к этому URL с помощью представлений на основе классов или простой проверки request.method.
  4. Если вы используете один пакет данных, вы можете добавить туда идентификатор блока, заголовок и другие метаданные и использовать его при создании экземпляров диаграмм с помощью JS.
...