/where-to-go

Сайт о самых интересных местах Москвы

Primary LanguagePython

Where to go

Сайт о самых интересных местах Москвы

Описание

Интерактивная карта мест для организации досуга

Начало работы

Особенности

  • помогает организовать досуг, отображая на карте замечательные места и развлечения возле дома и работы,
  • предоставляет возможность:
    • создать/редактировать локации,
    • использовать визуальный редактор для текстовок,
    • поиска локации по названию,
    • создать/редактировать фото локации,
    • просмотра превью фотографий локаций,
    • удобно менять (drag & drop) порядок отображения фото на главной сайта,
    • подсчёта фото по локациям.
  • обеспечивает загрузку информации о локациях в БД, используя manage-команду,
  • источник данных,
  • статус проекта: учебный.

Примеры использования

Выбор места для досуга:

index_page_1_leisure

Получить сырые данные о локации:

place_endpoint_page_1

Создать/редактировать запись локации в БД:

admin_page_1_edit

Предметная область

Схема сущностей БД

index_page_1_leisure

Пример исходных данных

{
    "title": "Антикафе Bizone",
    "imgs": [
        "https://raw.githubusercontent.com/devmanorg/where-to-go-places/master/media/1f09226ae0edf23d20708b4fcc498ffd.jpg",
        "https://raw.githubusercontent.com/devmanorg/where-to-go-places/master/media/6e1c15fd7723e04e73985486c441e061.jpg",
        "https://raw.githubusercontent.com/devmanorg/where-to-go-places/master/media/be067a44fb19342c562e9ffd815c4215.jpg",
        "https://raw.githubusercontent.com/devmanorg/where-to-go-places/master/media/f6148bf3acf5328347f2762a1a674620.jpg",
        "https://raw.githubusercontent.com/devmanorg/where-to-go-places/master/media/b896253e3b4f092cff47a02885450b5c.jpg",
        "https://raw.githubusercontent.com/devmanorg/where-to-go-places/master/media/605da4a5bc8fd9a748526bef3b02120f.jpg"
    ],
    "description_short": "Настольные и компьютерные игры, ...",
    "description_long": "<p>Рядом со станцией метро «Войковская» открылось антикафе ...</p>",
    "coordinates": {
        "lng": "37.50169",
        "lat": "55.816591"
    }
}

Структура проекта

Главная страница

Реализована html-шаблоном и контекстом.

Тут.

Панель администратора

Представляет собой кастомизированное приложение на базе Django admin site.

Доступна при запущенном сайте по адресу.

Endpoint сырых данных о локации

Формируется программным объектом JsonResponse.

Доступен при запущенном и наполненном данными сайте по адресу.

Manage-команда для загрузки данных в БД

Относится к кастомному Dj-приложению places, реализована в модуле load_place.py.

Примеры работы

Используемые технологии

Frontend-часть

Backend-часть

Требования к окружению

  • Python 3.8 и выше,
  • Linux/Windows,
  • Переменные окружения (ПеО),
  • Файлы для системы виртуализации (СВ).

Проект настраивается через ПеО, достаточно задать их в файлах .env.override и .env.override.db. Передача значений ПеО происходит с использованием environs.

Среды (dev-, prod-), организованные с использованием СВ-ии, используют файлы docker-compose.dev.yml и docker-compose.yml.

По умолчанию проект подготовлен к запуску в prod-среде.

Общие

Параметры проекта

Ключ Назначение По умолчанию
ALLOWED_HOSTS Разрешённые хосты -
DEBUG Режим отладки False
SECRET_KEY Уникальное непредсказуемое значение -
FRONTEND_PART_APP_DIR Имя каталога с фронтенд-частью проекта where-to-go-frontend
STATIC_ROOT Имя каталога с статикой проекта static
STATIC_URL Имя path-части URL для отдачи статики /static/
MEDIA_ROOT Имя каталога с медиа-файлами проекта media
MEDIA_URL Имя path-части URL для отдачи медиа-файлов /media/
PSQL_DB_ENGINE Имя движка СУБД django.db.backends.postgresql
PSQL_DB_HOST Имя сервиса развёрнутого в контейнере для БД db
PSQL_DB_PORT Порт СУБД 5432
PSQL_DB_NAME Имя БД where_to_go
PSQL_DB_USER Имя пользователя БД proba
PSQL_DB_PASSWORD Пароль пользователя БД proba

Параметры подключения к БД

По умолчанию используется СУБД PostgreSQL.

Ключ Назначение По умолчанию
POSTGRES_USER Суперпользователь БД postgres
POSTGRES_PASSWORD Пароль суперпользователя БД postgres

Организация dev-среды

  • создать на основе env.override и env.override.db файлы env и env.db,
  • заполнить значениями ключи, у которых нет значений по умолчанию,
  • переопределить значения ключей, указанных в таблице ниже,
  • переименовать docker-compose.dev.yml в docker-compose.yml.
Ключ Назначение Должно стать
DEBUG Режим отладки True

Организация prod-среды

  • создать на основе env.override и env.override.db файлы env и env.db,
  • заполнить значениями ключи, у которых нет значений по умолчанию.

Установка

  1. Клонировать проект:
git clone https://github.com/Padking/where-to-go.git
cd where-to-go
  1. Создать каталог виртуального окружения (ВО)*, связать каталоги ВО и проекта, установить зависимости:
mkvirtualenv -p <path to python> <name of virtualenv>
setvirtualenvproject <path to virtualenv> <path to project>
pip install -r requirements_dev.txt
  1. Установить и настроить Docker,
  2. Установить и настроить Docker Compose,
  3. Собрать образы для сервисов проекта, запустить контейнеры с сервисами в фоновом режиме:
docker-compose build
docker-compose up -d
  1. Применить миграции к проекту:
docker-compose exec web python manage.py migrate --noinput
  1. Собрать статику для проекта:
docker-compose exec web python manage.py collectstatic --clear
  1. Применить фикстуру
docker-compose exec web python manage.py loaddata ./places/fixtures/db_data.json
  1. Запустить сайт,

  2. Cоздать суперпользователя в интерактивном режиме**:

docker-compose exec web python manage.py createsuperuser
  1. Наполнить БД информацией о локациях одним из способов:

    • через Django admin site:
      • перейти на сайт,
      • войти под учётной записью, созданной в п.10 или сформированной администратором ИС-ы
      • совершить целевое действие,
      • убедиться в отображении локаций на главной странице сайта.
    • используя manage-команду load_place:
      • получить справку по работе с manage-командой:
      docker-compose exec web python manage.py load_place --help
      docker-compose exec web python manage.py load_place <ссылка на данными о локации>
      • совершить целевое действие,
      • убедиться в отображении локаций на главной странице сайта.
  2. Завершить работу сайта:

docker-compose down

* с использованием virtualenvwrapper

** для наполнения БД через Django admin site

Примеры запуска

$ docker-compose exec web python manage.py load_place --help
usage: manage.py load_place [-h] [--version] ... raw_file_url

Создаёт записи об интересных местах и их фотографиях в БД.

positional arguments:
  raw_file_url         URL-адрес json-файла с данными

optional arguments:
  -h, --help            show this help message and exit
...
$ docker-compose exec web python manage.py load_place https://github.com/devmanorg/where-to-go-places/raw/master/places/Воробьёвы%20горы.json
Интересное место и фото добавлены в БД из источника: https://github.com/devmanorg/where-to-go-places/raw/master/places/Воробьёвы%20горы.json