No description
  • Python 54.8%
  • HTML 25%
  • JavaScript 17.8%
  • CSS 2.3%
  • Makefile 0.1%
Find a file
2026-05-11 17:20:24 +03:00
.cursor Добавлена модель для сбора аналитики, откуда пользователи добавляют посещенные города 2026-05-10 23:23:25 +03:00
.github/workflows Добавлены тесты ui-lib на Vitest и этап npm test в CI 2026-04-26 20:35:01 +03:00
account Добавлены показатели по регионам в обзор посещённых городов 2026-05-04 15:45:29 +03:00
advertisement Добавлены русскоязычные названия для всех разделов админки 2025-12-02 14:34:01 +03:00
analytics Исправлены ошибки типизации и форматирования 2026-05-11 17:20:24 +03:00
blog Исправлено получение IP адреса пользователя при просмотре статей 2026-02-13 16:12:33 +03:00
city Исправлены ошибки типизации и форматирования 2026-05-11 17:20:24 +03:00
collection Обновлены тесты 2026-04-11 14:21:35 +03:00
country Ограничен список стран в фильтре городов только используемыми странами 2026-04-13 15:36:07 +03:00
dashboard Исправлены типы и тесты для прохождения mypy 2026-03-26 15:38:54 +03:00
frontend Добавлены показатели по регионам в обзор посещённых городов 2026-05-04 15:45:29 +03:00
main_page Добавлено ограничение размера загружаемых фотографий 2026-04-10 16:04:22 +03:00
MoiGoroda Добавлена модель для сбора аналитики, откуда пользователи добавляют посещенные города 2026-05-10 23:23:25 +03:00
news Добавлена миграция для автоматической конвертации новостей из MD в HTML 2026-02-08 14:12:34 +03:00
place visited_only для карты городов; docstrings; тесты 2026-02-07 11:50:36 +03:00
premium Initial commit 2026-03-27 14:42:52 +03:00
region Форматирование через ruff 2026-04-10 16:07:31 +03:00
services Обновлены тесты 2026-05-04 11:58:29 +03:00
share Добавлен API-режим статистики для shared-страниц. 2026-04-29 17:54:52 +03:00
static Изменена работа по отображению плейсхолдера изображения города 2026-04-10 16:04:22 +03:00
subscribe Добавлены русскоязычные названия для всех разделов админки 2025-12-02 14:34:01 +03:00
templates Добавлена модель для сбора аналитики, откуда пользователи добавляют посещенные города 2026-05-10 23:23:25 +03:00
ui_demo Добавлен компонент «Прогресс-бар» 2026-05-01 13:31:55 +03:00
utils Создан компонент выпадающего списка 2026-04-21 17:51:28 +03:00
.cliffignore Добавлены файлы конфигурации для генерации CHANGELOG.md с помощью git 2024-05-15 20:06:55 +03:00
.gitignore Обновлены тесты 2026-04-11 14:21:35 +03:00
.nvimlog Обновлена версия Django до 5.2 2026-03-26 14:52:15 +03:00
.pre-commit-config.yaml Возвращён pre-commit 2024-08-01 19:14:59 +03:00
.prettierrc Добавлен Prettier линтер и отформатирован autoComplete.css 2025-10-01 15:43:01 +03:00
.pylintrc Сделана проверка region.views линтером pylint 2023-04-21 13:17:18 +03:00
.python-version Рефакторинг приложения share 2024-03-10 14:29:39 +03:00
CHANGELOG.md Обновление CHANGELOG.md 2026-05-04 11:02:09 +00:00
cliff.toml Заменено название 'магнит' на 'сувенир из города' в приложении region 2024-05-21 13:30:48 +03:00
docker-compose.yml Обновлён docker-compose файл 2024-11-10 13:33:33 +03:00
initial_db.json Обновлён initial_db.json (список стран) 2024-09-04 15:49:12 +03:00
LICENSE Исправлены все ошибки, найденные на этапе pre-commit 2024-05-10 19:19:43 +03:00
llms-full.txt Добавлен llms-full.txt 2026-03-26 14:52:37 +03:00
Makefile Добавлены тесты ui-lib на Vitest и этап npm test в CI 2026-04-26 20:35:01 +03:00
manage.py Исправлены все ошибки, найденные на этапе pre-commit 2024-05-10 19:19:43 +03:00
NOTICE Исправлены все ошибки, найденные на этапе pre-commit 2024-05-10 19:19:43 +03:00
poetry.lock Добавлена поддержка HEIC при загрузке фото города 2026-03-27 16:12:03 +03:00
pyproject.toml Обновлены тесты 2026-04-11 14:21:35 +03:00
README.md Доработана система премиум-подписок: активация по вебхуку, истечение по cron, скрытие рекламы 2026-03-26 14:52:05 +03:00

🗺️ Мои города

Logo

Современный веб-сервис для отслеживания и визуализации путешествий

Live Demo License

📖 О проекте

Мои города — это полнофункциональный веб-сервис для отслеживания посещённых городов и стран. Приложение позволяет пользователям вести учёт своих путешествий, делиться достижениями с друзьями и открывать новые направления для поездок.

Ключевые возможности

  • 🗺️ Интерактивные карты — визуализация посещённых мест на картах OpenStreetMap
  • 📊 Подробная статистика — детальная аналитика путешествий с графиками и диаграммами
  • 👥 Социальные функции — подписки на других путешественников и уведомления о новых поездках
  • 📝 Личные заметки — запись впечатлений с поддержкой Markdown
  • 🌍 Глобальный охват — поддержка городов и стран по всему миру
  • 📱 Адаптивный дизайн — отличная работа на всех устройствах

🚀 Технологический стек

Python Django PostgreSQL Bootstrap Leaflet

Backend

  • Django 4.2 — основной веб-фреймворк
  • PostgreSQL — основная база данных
  • Django REST Framework — API для фронтенда

Frontend

  • Bootstrap 5.3 — UI фреймворк
  • Leaflet — интерактивные карты
  • Vanilla JavaScript — клиентская логика
  • Markdownify — рендеринг Markdown

Инструменты разработки

  • Poetry — управление зависимостями
  • Pytest — тестирование
  • MyPy — статическая типизация
  • Ruff — линтинг и форматирование
  • Pre-commit — автоматические проверки

🎯 Основные функции

🗺️ Карты и визуализация

  • Интерактивные карты городов и стран с использованием OpenStreetMap
  • Слои границ регионов и стран для лучшей ориентации
  • Скриншоты карт для сохранения достижений
  • Фильтрация по странам, регионам и коллекциям

📊 Статистика и аналитика

  • Личная статистика с графиками и диаграммами
  • Географические достижения по регионам и странам
  • Временная статистика посещений по годам и месяцам
  • Сравнение с другими пользователями

👥 Социальные возможности

  • Подписки на других путешественников
  • Уведомления о новых поездках подписанных пользователей
  • Публичные профили с настраиваемой приватностью
  • Общие карты для просмотра городов друзей

📝 Личный дневник путешествий

  • Заметки и впечатления с поддержкой Markdown
  • Рейтинги городов от 1 до 5 звёзд
  • Даты посещений с возможностью повторных визитов
  • Сувениры — отметки о наличии памятных вещей

🎒 Коллекции и планирование

  • Тематические коллекции (Золотое кольцо, города на Волге и др.)
  • Список желаний — города, которые хочется посетить
  • Рекомендации на основе посещённых мест
  • Поиск по городам, регионам и странам

🛠️ Установка и настройка

Предварительные требования

  • Python 3.12+
  • Poetry
  • PostgreSQL 12+
  • Node.js 18+ и npm (обязательно для работы фронтенда)

Быстрая установка

  1. Клонирование репозитория
git clone https://github.com/Shecspi/MoiGoroda.git
cd MoiGoroda
  1. Установка Python и зависимостей
# Установка нужной версии Python через pyenv
if [[ "$(pyenv versions 2> /dev/null)" != *"$(cat .python-version )"* ]]; then
    pyenv install $(cat .python-version)
fi

# Создание виртуального окружения и установка зависимостей
poetry env use $(cat .python-version)
poetry install
  1. Настройка окружения
# Копирование файла конфигурации
cp MoiGoroda/.env.example MoiGoroda/.env

# Редактирование настроек базы данных в .env файле
# DATABASE_NAME=your_db_name
# DATABASE_USER=your_db_user
# DATABASE_PASSWORD=your_db_password
  1. Инициализация базы данных
# Применение миграций
poetry run python manage.py migrate

# Создание суперпользователя
poetry run python manage.py createsuperuser

# Загрузка начальных данных (города, регионы, страны)
poetry run python manage.py loaddata initial_db.json
  1. Настройка .env файла для разработки
# Убедитесь, что в .env файле установлено:
DEBUG=True
TESTING=True
  1. Запуск проекта в режиме разработки

Используйте команды Makefile (см. раздел "Использование Makefile"):

  • make run-frontend-dev — запуск frontend dev server
  • make run-dev — запуск Django dev server

Важно: Для полноценной работы приложения необходимо запустить оба сервера одновременно в разных терминалах.

🎯 Использование Makefile (рекомендуется)

Для упрощения работы с проектом доступен Makefile с набором полезных команд:

# Просмотр всех доступных команд
make help

🚀 Запуск в режиме разработки (Development)

Для запуска проекта в режиме разработки необходимо:

  1. Настроить .env файл с параметрами:

    DEBUG=True
    TESTING=True
    
  2. Запустить frontend dev server (в первом терминале):

    make run-frontend-dev
    

    Frontend будет доступен на http://localhost:5173

  3. Запустить Django dev server (во втором терминале):

    make run-dev
    

    Backend будет доступен на http://localhost:8000

Важно: Для полноценной работы приложения необходимо запустить оба сервера одновременно.

🏭 Запуск в production режиме

Для запуска проекта в production режиме необходимо:

  1. Настроить .env файл с параметрами:

    DEBUG=False
    TESTING=False
    STATIC_ROOT=/path/to/static/directory
    ALLOWED_HOSTS=your-domain.com,www.your-domain.com
    
  2. Собрать проект:

    make build-prod
    

    Эта команда выполнит:

    • Установку зависимостей frontend
    • Сборку frontend
    • Сборку статических файлов Django
  3. Запустить production сервер:

    make run-prod
    

Проверка кода

# Комплексная проверка (форматирование, линтеры, тесты)
make check

Совет: Используйте make check перед коммитом для проверки всего кода!

Установка для продакшена

Для продакшена используйте команды Makefile:

# Настройте .env файл с параметрами:
# DEBUG=False
# TESTING=False
# STATIC_ROOT=/var/www/static
# ALLOWED_HOSTS=your-domain.com

# Создание директории для статических файлов
sudo mkdir -p /var/www/static
sudo chown www-data:www-data /var/www/static

# Сборка проекта
make build-prod

# Запуск production сервера
make run-prod

Примечание: В production рекомендуется использовать веб-сервер (Nginx/Apache) для отдачи статики вместо --insecure флага.

Премиум-подписки: истечение по расписанию

Чтобы просроченные премиум-подписки переводились в статус «Истекла», нужно ежедневно запускать management-команду, например через cron или systemd timer:

# Пример записи в crontab (раз в день в 03:00)
0 3 * * * cd /path/to/MoiGoroda && .venv/bin/python manage.py expire_premium_subscriptions

Подставьте свой путь к проекту и к интерпретатору Python (или используйте poetry run).

🧪 Тестирование

Проект включает комплексную систему тестирования с покрытием всех основных компонентов.

Запуск тестов

С использованием Makefile:

# Запуск всех тестов
make test

Или напрямую через Poetry:

# Запуск всех тестов
poetry run pytest

# Запуск тестов с покрытием
poetry run pytest --cov

# Запуск тестов конкретного модуля
poetry run pytest city/tests/

# Запуск тестов в параллельном режиме
poetry run pytest -n auto

Примечание: Для запуска всех проверок (форматирование, линтеры, тесты) используйте make check.

🏗️ Архитектура проекта

MoiGoroda/
├── account/          # Система аутентификации и профили
├── city/            # Основная логика работы с городами
├── country/         # Работа со странами
├── region/          # Регионы и их статистика
├── collection/      # Тематические коллекции
├── subscribe/       # Система подписок и уведомлений
├── share/           # Публичные профили и статистика
├── place/           # Произвольные места на карте
├── dashboard/       # Административная панель
├── news/            # Новости и объявления
├── services/        # Общие сервисы и утилиты
├── templates/       # HTML шаблоны
├── static/          # Статические файлы (CSS, JS, изображения)
└── frontend/        # Исходники JavaScript

Аутентификация

API использует сессионную аутентификацию Django.

🤝 Участие в разработке

Я всячески приветствую вклад в развитие проекта!

Как помочь

  1. Fork репозитория
  2. Создайте feature branch (git checkout -b feature/amazing-feature)
  3. Внесите изменения и добавьте тесты
  4. Убедитесь, что код соответствует стандартам:
    make check  # Форматирование + линтинг + тесты
    
  5. Зафиксируйте изменения (git commit -m 'Add amazing feature')
  6. Отправьте Pull Request

Полезные команды для разработчиков

make check       # Полная проверка (форматирование, линтеры, тесты)

📝 Лицензия

Этот проект распространяется под лицензией Apache License 2.0.

📞 Контакты


Если проект вам понравился, поставьте звезду!

⬆ Наверх