Настройка поля – понятного и удобного для авторов статей.
Предоставление статей пользователю в унифицированном виде.
Подключение метаданных к статьям, а также колонки с релевантными материалами.
Генерация уникальных страниц разделов и запросов по настраиваемым шаблонам.
Стэк
Python, Django
Решение
Пользователями проекта являются авторы статей и посетители сайта. Поэтому структура сайта должна быть одинаково удобной и для первых, и для вторых – с интуитивной навигацией без сложных фильтров и личных кабинетов.
В качестве инструмента для создания статей мы использовали готовый продукт, который предварительно настроили под наш проект. Это позволило дать людям, которые будут писать материалы для издания, простое и хорошо оптимизированное поле для работы и коммуникации.
Далее, для написания основного связующего Rest Api бэкенда, мы использовали Django с надстройкой Rest Framework, подключенными базами данных MongoDB и Redis, а также с воркером отложенных задач celery. Это помогло стандартизировать запросы к базе данных, сделать ее структуру более четкой, а выполнение запросов – более слаженным.
Архитектурное решение первоначально вызвало внутри команды много дискуссий. Нам важно было понять, как лучше всего доставить новостные статьи до пользователя. Выбирали из двух вариантов – использовать готовый модуль расширения поля для авторов или написать свой бэкенд, который будет соединять имеющийся инструмент с фронтендом, т.е. с тем, что увидит пользователь.
В итоге, после многочисленных тестов мы решили вынести бэкенд в отдельную “сущность” (а-ля облачный сервис), которая будет принимать, обрабатывать и хранить статьи от авторов.
Первую продакшн версию сайта мы сделали примерно за 2 месяца, а потом продолжили работу – добавили по просьбе клиента новый функционал и оптимизировали работу всех структурных элементов.
Проект продемонстрировал, что для обработки структурных данных – таких, как новостные статьи – очень эффективно использование документо-ориентированной базы данных MongoDB. А также, что хорошо оптимизированные облачные сервисы могут стать решением многочисленных проблем. В нашем проекте мы использовали их для преодоления трудностей интеграции с готовым продуктом (инструментом для авторов) и сохранения одинаковых состояний для всех поступающих данных.