2014-02-03 4 views
0

Я разрабатываю веб-приложение, которое создает визуализацию некоторых данных.
Данные взяты от сторонних организаций, используя их API-интерфейсы и импортированы в мою базу данных. Ввоз будет производиться спорадически, поэтому моя база данных будет довольно статичной.Django: создайте файл csv и загрузите его с помощью Javascript

Визуализации будут динамически создаваться в JavaScript с использованием d3. Когда вы думаете о том, как передавать (и форматировать) данные с сервера на клиент, я думал, что могу экспортировать его в CSV-файл, а затем загрузить его из javascript (d3 имеет встроенный синтаксический анализатор csv).
Таким образом, файл csv удваивается как система кэширования: он будет регенерировать (и, следовательно, запросить базу данных), только если он старше, скажем, недели.

Мой вопрос: где и как сохранить сгенерированный файл csv? STATIC_ROOT, MEDIA_ROOT, другой жесткий каталог? Также, как вы думаете, система csv - хорошая идея?

Извините, если вопросы могут показаться бесполезными, я буквально взял и django, и d3 меньше, чем неделю назад.

ответ

1

Вы можете поместить файл в STATIC_ROOT, это будет подходящее место.

Две мысли на стороне:

  1. ли вы думаете о блокировке/mutexing файл CSV во время записи? Или это не проблема, если клиент может получить половину CSV-файла, если запрос приходит в неудачный момент?

  2. CSV не является стандартным способом передачи серии данных клиенту JS. Я бы, вероятно, написал массив JSON в файл.

1

В Django мы обычно храним статические файлы - файлы, используемые нашим сайтом для рендеринга контента (например, CSS, JS) под STATIC_ROOT. Файлы под MEDIA_ROOT обычно являются медиафайлами, такими как изображения и видео, которые Django позволяет обслуживать веб-сервер. Я бы сохранил файл данных визуализации под каталогом data в моем приложении (которое входит в основную директорию проекта django). Этот article - хороший ресурс для структурирования вашего проекта django.

Что касается использования файла CSV для файла данных, который управляет визуализацией, я бы предпочел экспортировать ваши данные как JSON, так как это более компактная нотация. Кроме того, я бы предположил, что декодирование JSON в JavaScript будет быстрее, чем CSV. Хотя это будет зависеть от других параметров, таких как размер и структура данных в файле.

+0

Как я могу ссылаться на каталог данных, просто hardcode '../ data/something.csv' из моего файла html/js? Разве Django не обслуживает статические файлы? – LeartS

+1

Я бы посоветовал создать переменные PROJ_ROOT, DATA_ROOT (относительно PROJECT_ROOT), используя pythons 'os' module. Таким образом, вы можете быть в безопасности от различий в обозначениях разделителей путей для Unix и Windows. – shaktimaan

+0

Является ли csv не более компактным, чем json, поскольку имена полей появляются только один раз в заголовке? d3 имеет хорошие инструменты для обработки csv, и это стало моим предпочтительным форматом для работы. – PhoebeB

Смежные вопросы