Django: самый быстрый способ обновить данные, которые когда-то были отправлены из шаблона для просмотра - PullRequest
0 голосов
/ 11 декабря 2018

Я работаю над приложением визуализации данных, которое позволит пользователю фильтровать данные, которые он видит, по различным критериям.

Я хочу сохранить как можно больше логики на стороне Python / Django, вот так:

  1. Данные передаются из представления Django в шаблон.
  2. На веб-интерфейсе пользователь фильтрует данные с помощью различных элементов управления: раскрывающихся списков, ползунков и т. Д.
  3. входные данные управления отправляются обратно в представление Django (через почтовый запрос AJAX?), которое возвращает отфильтрованные данные и отправляет их обратно в шаблон.

4. Шаблон - визуализация - обновляется с помощью отфильтрованногоdata.

Это хороший подход?Меня беспокоит то, что много данных будет летать, и приложение может не отвечать на запросы.

Другая, возможно, более быстрая идея состоит в том, чтобы фильтровать данные на стороне клиента в JavaScript - но я действительно хотел бы использовать большие возможности.Вместо этого библиотеки данных для Python.

1 Ответ

0 голосов
/ 11 декабря 2018

Если вы хотите использовать DRF API, используйте его.Многие сайты имеют функции фильтрации.Я бы посоветовал вам взглянуть на пакет django_filter. возможно интегрировать с DRF.

Худшая вещь при фильтрации данных на стороне клиента состоит в том, что вы не можете использовать нумерацию страниц.Представьте, что у вас есть 500+ объектов для фильтрации, функция фильтрации javascript - это то, что действительно замедлит ваше приложение.

В то же время, если у вас есть 20-30 объектов для фильтрации, и это число не будет растизатем вы можете использовать только JS и одну конечную точку: getAll()

Общий подход заключается в настройке обработчика javascript on_change и построении GET-запросов, например (пример из реального проекта):

https://yourbackend.com/api/product/?status=not_published,published,inactive&search=132&moderation_status=declined,on_moderation,not_ready&ordering=desc&price_max=1000&page=1

DRF + django_filters будет работать просто отлично, при минимальном задействованном коде.

Хорошо известной ошибкой на стороне js является выполнение запроса без тайм-аута, например, пользователь пишет текст и на каждом keyUP() запрос на событие отправляется.Или он перемещает ползунок и делает много запросов - вам нужно будет сделать запрос, когда пользователь остановит его, например, через 300 мс после того, как он выбрал значение.См. Этот вопрос для справки.

Конечно, есть еще один момент.Ваша база данных должна быть нормализована и иметь правильные индексы.Но вы должны взглянуть на эту сторону, если у вас будут очень медленные очереди sql .

Подводя итог: я бы выбрал тонкий слой js и большую часть работы выполнял бы на бэкенде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...