Я работаю над веб-приложением, но, поскольку я довольно зелен, я был бы признателен за несколько советов по поводу некоторых недостающих частей из стека. Это в основном то, что до сих пор отсутствует , из моего выбора базы данных PostgreSQL, некоторых существующих кодов Python (включая psycopg2 в качестве адаптера БД) и инфраструктуры Django, чтобы весь поток работал.
Вот предполагаемый рабочий процесс:
Пользователь загружает необработанные файлы через браузер (некоторая справочная информация об этом типе файлов обобщена здесь ). Короче говоря, файл содержит сигналы, и сигналы могут иметь дикие имена, и даже количество сигналов в каждом загруженном файле часто отличается.
При обработке загруженного файла серверная часть будет анализировать сигналы и сохранять их в новой таблице данных для каждого загруженного файла, где каждый столбец равен единице. сигнал и первый столбец - это временные метки для всех сигналов (мы предполагаем, что количество точек для всех сигналов одинаковое и соответствует временным меткам). На этом этапе сценарий также сохраняет метаинформацию о загруженном файле в мастер-таблицу , столбцы которой включают, помимо прочего, 1) имя таблица данных и 2) массив имен сигналов - это, по сути, массив имен столбцов в соответствующей таблице данных в том же порядке .
После шага загрузки пользователь просматривает мастер-таблицу , где он / она может найти ссылки на последний загруженный файл вместе с другими файлами, которые могут были ранее загружены.
Когда пользователь выбирает один «файл» из предыдущего представления, он / она фактически выбирает одну таблицу данных для работы или, если быть точным, для графика какая-то диаграмма (например, объект dygraphs ) с использованием нескольких сигналов из этой таблицы данных . Теперь таблица может содержать сто сигналов (столбцов), и нет смысла выводить их все на одну диаграмму, поэтому я планирую использовать 4 раскрывающихся списка (имен сигналов / столбцов), чтобы пользователь мог выбрать до 4 сигнала к сюжету. Страница графика должна быть «интерактивной», поэтому нет необходимости обновлять или нажимать любую кнопку отправки, когда пользователь хочет изменить один из сигналов на график.
Есть еще TODO с графиком / диаграммой, но они, вероятно, не имеют отношения к этому вопросу.
На данный момент я застрял на шаге 4.
В базе данных PostgreSQL я создал эту главную таблицу , используя django.db.models
. На шаге 1 я использовал django.forms.ModelForm
для получения загруженного пользователем файла, а на шаге 2 при обработке каждого загруженного файла я в основном добавил одну строку в мастер-таблицу , как описано ранее. Независимо от имени необработанного файла, я использую uuid4()
для переименования файла. Вероятно, стоит упомянуть, что тогда uuid является первичным ключом для мастер-таблицы . На этом же шаге я использую тот же uuid для создания отдельной таблицы в качестве моей таблицы данных для этого загруженного файла и сохраняю значения сигналов в таблице в виде столбцов данных. Это делается только через python с помощью psycopg2
. После этого пользователь переводится в представление, описанное в шаге 3, для этого используется django.views.generic.ListView
.
На шаге 4 - когда пользователь щелкает один из файлов в ListView
на шаге 3, я использую DetailView
, чтобы я мог получить массив имен сигналов из мастер-таблицы . Я создал 4 выпадающих списка, используя циклы django, каждый из которых содержит массив имен сигналов. Вот в чём дело, я не знаю, как поступить. В идеале я думаю, что это может быть разбито на несколько шагов:
а) каждый раз, когда пользователь выбирает или изменяет один сигнал из одного из выпадающих списков
b) некоторый JavaScript, чтобы ощутить это изменение и должен вызвать бэкэнд-функцию (?) Для получения меток времени и выбранного сигнала из таблицы с именем "some uuid"
c) извлекаемые данные предпочтительно представляют собой два массива (временные метки и сигнал), которые веб-интерфейс должен иметь возможность использовать для создания или обновления этого графика / диаграммы
Поскольку таблица с именем "some uuid" создается вручную, я не уверен, что ORM Django поможет мне в дальнейшем. Итак, мой вопрос - Какие методы мне нужны, чтобы остальные шаги работали?
Потенциально:
Нужен ли интерфейс?
Нужно ли создавать базу данных API?
Я не уверен, что заголовок вопроса точно обобщает природу вопроса. Любые предложения по редактированию / разработке также приветствуются. Спасибо!