No description
  • Python 52.7%
  • HTML 24%
  • JavaScript 20.8%
  • CSS 2.4%
Find a file
2026-07-30 11:12:29 +03:00
.cursor Перенесен Tailwind config в CSS 2026-06-30 14:14:09 +03:00
.github/workflows Добавлен запуск Redis при деплое 2026-06-21 14:17:34 +03:00
.opencode Перенесен Tailwind config в CSS 2026-06-30 14:14:09 +03:00
account Удалено логирование регистрации пользователя 2026-06-22 14:29:49 +03:00
advertisement Добавлены русскоязычные названия для всех разделов админки 2026-03-26 14:48:46 +03:00
analytics Исправление для линтера 2026-06-13 15:11:37 +03:00
blog Добавлено редактирование карусели и подпись в превью TinyMCE 2026-06-13 11:32:40 +03:00
city Добавлена фильтрация по годам в модальное окно «Хронология» 2026-07-04 19:57:27 +03:00
collection Исправлен read-only рейтинг персональной коллекции 2026-07-11 12:56:04 +03:00
country Оптимизирован расчёт рейтинга стран 2026-06-21 22:51:09 +03:00
dashboard Исправлена ошибка с датой в дашборде 2026-06-22 07:02:49 +03:00
docs/superpowers Добавлено переключение кластеризации непосещённых городов 2026-07-25 11:49:27 +03:00
frontend Удалено уведомление о публикации результатов региона 2026-07-25 22:36:16 +03:00
geo_polygons Исправления для mypy 2026-05-31 18:27:38 +03:00
main_page Добавлена страница справки про сервис просмотра полигонов OSM 2026-05-29 16:30:40 +03:00
MoiGoroda Замена Яндекс.Карт на OpenStreetMap для геокодирования городов 2026-07-30 11:12:29 +03:00
news Удалены случайно сделанные изменения 2026-03-26 14:52:04 +03:00
place Переведен эндпоинт списка мест на django-modern-rest 2026-06-23 17:34:47 +03:00
premium Исправлено форматирование тестов premium 2026-07-02 16:17:59 +03:00
region Удалено уведомление о публикации результатов региона 2026-07-25 22:36:16 +03:00
services Приведены cache-логи к общему формату 2026-06-21 23:45:21 +03:00
share Добавлен API-режим статистики для shared-страниц. 2026-04-29 17:54:52 +03:00
static Упрощён отложенный ресайз изображений после загрузки в TinyMCE 2026-06-13 11:32:40 +03:00
subscribe Добавлены русскоязычные названия для всех разделов админки 2026-03-26 14:48:46 +03:00
templates Замена Яндекс.Карт на OpenStreetMap для геокодирования городов 2026-07-30 11:12:29 +03:00
ui_demo Удален дублирующий docstring лицензии 2026-06-30 14:50:55 +03:00
utils Оптимизирована страница списка коллекций 2026-06-09 14:08:20 +03:00
.cliffignore Добавлены файлы конфигурации для генерации CHANGELOG.md с помощью git 2024-05-15 20:06:55 +03:00
.gitignore Обновление для перезагрузки Github Actions 2026-06-08 15:39:52 +03:00
.nvimlog Обновлена версия Django до 5.2 2026-03-26 14:52:15 +03:00
.pre-commit-config.yaml Исправлен pre-commit hook для Django тестов 2026-06-30 14:49:25 +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
AGENTS.md Удалено уведомление о публикации результатов региона 2026-07-25 22:36:16 +03:00
CHANGELOG.md Обновление CHANGELOG.md 2026-07-25 10:35:28 +00:00
cliff.toml Заменено название 'магнит' на 'сувенир из города' в приложении region 2024-05-21 13:30:48 +03:00
docker-compose.yml Ограничен доступ к Redis localhost 2026-06-21 14:30:21 +03:00
gunicorn.conf.py fix(prometheus): реализован сбор метрик в мультипроцессном режиме для Gunicorn 2026-06-13 15:04:42 +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 feat: switch production log handlers to JSON format 2026-06-22 17:05:06 +03:00
pyproject.toml feat: switch production log handlers to JSON format 2026-06-22 17:05:06 +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.

📞 Контакты


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

⬆ Наверх