ВЫПУСКНАЯ КВАЛИФИКАЦИОННАЯ РАБОТА - Разработка веб-сервиса с рекомендательной системой по достопримечательностям и местам культурного отдыха в России
- Клиент:
Vue.js - Сервер:
Django - База данных:
PostgreSQLс расширениемPostGIS - CSS-фреймворк:
Bootstrap 5 - Картографические сервисы:
Javascript APIот Яндекс. Карт иWikimedia - Почтовый сервис:
AnyMail
- Главная страница с интерактивной картой, на которой расположены метки с отображением культурных мест и достопримечательностей России
- Система регистрации и аутентификации
- Система закладок (избранного)
- Поиск достопримечательностей по предпочтениям пользователя
- Фильтрация меток по типам
Используется встроенное приложение django.contrib.auth. Для обмена данных между сервером и клиентом используется защищенный асинхронный режим через REST API (данные передаются в формате JSON)
Двухэтапная регистрация:
- Проверка уникальности имени пользователя и электронной почты
- Генерация криптографического токена времени и отправка ссылки через email-сервис AnyMail
- Активация аккаунта по ссылке
- Для корректного прохождения механизмов безопасности Django в конфигурациях библиотеки axios на фронтенде закреплены параметры обработки CSRF-токенов.
- Блокировка входа для неактивированных учетных записей
- Авторизация на основе сессионных Cookies бэкенда и синхронизация состояния интерфейса через localStorage клиента
- Инициация сброса по e-mail, если пользователь был зарегистрирован в этом сервисе
- Бэкенд находит пользователя, кодирует его первичный ключ базы данных в формат
Base64 - Генерация одноразового криптографического токена, привязанного к текущему хэшу пароля в БД
- Используется
JavaScript APIЯндекс Карт для интерактивной визуализации объектов - Фильтрация по категориям мест в реальном времени
- Динамический сбор геоданных через SPARQL-запросы к
Wikidata - Для повышения производительности внедрено серверное кэширование объектов на 24 часа для снижения сетевой нагрузки и ускорения ответа сервиса.
- По нажатию метки – появление фотографии и названия объекта и возможность добавить его в список «Избранное», если пользователь авторизован
- Каждая метка имеет свой цвет и логотип в зависимости от типа объекта
- Извлекается уникальный идентификатор объекта из параметров URL-строки при монтировании.
- Через SPARQL-код запрашивается у
Wikidata APIтекстовое описание, фотографию, координаты, сайт и регион объекта. - При наличии верифицированной ссылки компонент выполняет фоновый запрос к
Wikipediaдля извлечения краткой аннотации вместоWikidata - Возможность оценить место по пятибалльной шкале
- Пользователь может по поисковому запросу или по своему местоположению вывести список достопримечательности в радиусе 30 км. Для рассчета расстояния между объектами используется формула гаверсинусов.
docker compose up --build
ИЛИ
На первом терминале
cd tourist-map-client
npm run dev -- --host
Сайт доступен только на 127.0.0.1:5173
На втором терминале
cd tourist-map-django/map
python manage.py runserver