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

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

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

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

4. Шаблон - визуализация - обновляется отфильтрованными данными.

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

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

Я не понимаю, что вы имеете в виду под «Данные передаются из шаблона Django в представление». Разве представление не передает данные в шаблон? Для AJAX вы можете захотеть реализовать django-rest-framework.org в своем проекте для приятного интерфейса RESTful.

Cole 11.12.2018 00:24

@Cole, конечно, поправил сейчас. Кроме того, у меня уже есть DRF API, так что я действительно могу его использовать. Но я думаю, что мои опасения по-прежнему будут в силе - данные летают туда и обратно, а не фильтруются на стороне клиента, что, возможно, будет быстрее.

barciewicz 11.12.2018 07:43
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
78
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вы хотите использовать 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 и большую часть работы проделал бы над бэкэндом.

Другие вопросы по теме