Шаблоны проектирования для интеграции внешних данных с моделями Django на основе базы данных - PullRequest
4 голосов
/ 08 мая 2020

Я создаю веб-приложение Django, которое поддерживает как реляционные данные в базе данных MySQL, так и слабо связанные (по идентификатору ссылки) полнотекстовые данные в ElasticSearch (для оптимизированного поиска). Когда создается новый объект, я использую задачи Django сигналов + Celery для асинхронной индексации полнотекстовых данных в Elasticsearch через elasticsearch-py , что отлично работает. Изначально я начал с более тесно связанных подходов ( haystack и django -elasticsearch-dsl ), но быстро понял, что потерял гибкость, и решил немного разъединить .

Ну, теперь я прошел полный круг, когда я начал разрабатывать свои представления / шаблоны (где я в основном использую наборы запросов моделей и тому подобное), и я столкнулся с решениями о том, как лучше всего «свернуть» в моих слабосвязанных внешних данных. Например, если моя домашняя страница по умолчанию отображает список из 50 самых последних объектов, но затем пользователь выполняет полнотекстовый поиск, как мне лучше всего заменить объекты (через Ajax) на странице с результатом поиска ES? при этом также связывая соответствующие данные базы данных? А затем вернуться к данным набора запросов модели при нажатии фильтра и очистке результатов поиска?

Другими словами, каковы наилучшие практические реализации и шаблоны проектирования для интеграции внешних данных с Django ORM / на основе базы данных модели? Это уровень API на основе REST, который объединяет результаты из нескольких источников? Функция просмотра? Метод класса модели, который может динамически запрашивать Elasticsearch? Что-нибудь еще?

...