Амбасада за Урбанизм
О проекте
«Амбассада за урбанизм» — мультиязычная веб-платформа для сообщества белградских урбанистов. На сайте пользователи могут знакомиться с городскими инициативами, просматривать проекты, узнавать о команде и связываться с представителями сообщества.
В проекте я отвечал за разработку серверной части приложения — системы, которая хранит данные, обрабатывает запросы пользователей и передаёт необходимую информацию на сайт.
Что было реализовано
- REST API для взаимодействия пользовательского интерфейса с сервером и базой данных;
- публикация и отображение урбанистических проектов;
- поиск и фильтрация проектов по категориям и тегам;
- отдельные страницы проектов с описанием, изображениями и галереями;
- управление содержимым главной страницы и раздела «О нас»;
- вывод информации об участниках команды;
- обработка обращений через форму обратной связи;
- административная панель для добавления и редактирования контента;
- поддержка русского, английского и сербского языков — латиницы и кириллицы.
Техническая часть
Серверная часть разработана на Python с использованием Django и Django REST Framework. Для хранения данных используется PostgreSQL.
Для ускорения работы приложения реализовано кэширование данных с помощью Redis. Фоновые задачи, например отправка уведомлений после заполнения формы обратной связи, обрабатываются через Celery.
Также в проекте реализованы:
- авторизация пользователей с использованием JWT;
- разграничение прав администратора и контент-редактора;
- проверка загружаемых изображений и файлов;
- защита от слишком частых запросов;
- настройка безопасного взаимодействия frontend- и backend-частей;
- автоматическое обновление кэша после изменения контента;
- документация API в Swagger и ReDoc;
- автоматические тесты и проверка качества кода;
- контейнеризация и запуск проекта через Docker.
Основные задачи проекта
Одной из ключевых задач было создание гибкой системы управления контентом. Представители проекта могут самостоятельно добавлять и редактировать материалы через административную панель без внесения изменений в программный код.
Отдельное внимание уделялось мультиязычности. Один и тот же контент должен корректно отображаться на четырёх языковых версиях сайта.
Также была выполнена оптимизация запросов к базе данных и добавлено кэширование, благодаря чему страницы загружаются быстрее, а сервер выполняет меньше повторных операций.
Результат
В результате была создана серверная основа для полноценного мультиязычного сайта. Она позволяет команде самостоятельно управлять проектами и содержимым страниц, а пользовательскому интерфейсу — получать структурированные, проверенные и актуальные данные через API.