Skip to content

Latest commit

 

History

61 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ВикиТурист

ВЫПУСКНАЯ КВАЛИФИКАЦИОННАЯ РАБОТА - Разработка веб-сервиса с рекомендательной системой по достопримечательностям и местам культурного отдыха в России

Стек технологий

  • Клиент: 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

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages