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