/Django-tree_menu

Тестовое задание - древовидное меню на Django custom template tag

Primary LanguagePython

Проект tree-menu:

Tree-menu CI/CD

Древовидное меню на Django, испоьзуя custom template tag.

Тестовое задание


Оглавление:


Технологии:

Подробнее

Языки программирования, библиотеки и модули:

Python

Фреймворк, расширения и библиотеки:

Django

Базы данных и инструменты работы с БД:

SQLite3 PostgreSQL

CI/CD:

GitHub_Actions docker_hub docker_compose gunicorn Nginx Yandex.Cloud Telegram

⬆️Оглавление


Установка и запуск:

Удобно использовать принцип copy-paste - копировать команды из GitHub Readme и вставлять в командную строку Git Bash или IDE (например VSCode).

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

Предполагается, что пользователь:

  • создал аккаунт DockerHub, если запуск будет производиться на удаленном сервере.
  • установил Docker и Docker Compose на локальной машине или на удаленном сервере, где проект будет запускаться в контейнерах. Проверить наличие можно выполнив команды:
    docker --version && docker-compose --version

Локальный запуск

!!! Для пользователей Windows обязательно выполнить команду:

git config --global core.autocrlf false

иначе файл start.sh при клонировании будет бракован.

  1. Клонируйте репозиторий с GitHub и введите данные для переменных окружения (значения даны для примера, но их можно оставить):
git clone https://github.com/alexpro2022/Django-tree_menu.git && \
cd Django-tree_menu && \
cp env_example .env && \
nano .env
Локальный запуск: Django/SQLite3
  1. Создайте и активируйте виртуальное окружение:

    • Если у вас Linux/macOS
     python -m venv venv && source venv/bin/activate
    • Если у вас Windows
     python -m venv venv && source venv/Scripts/activate
  2. Установите в виртуальное окружение все необходимые зависимости из файла requirements.txt:

python -m pip install --upgrade pip && pip install -r requirements.txt
  1. Выполните миграции, загрузку данных, создание суперюзера и запустите приложение:
python tree_menu/manage.py makemigrations && \
python tree_menu/manage.py migrate && \
python tree_menu/manage.py load_data && \
python tree_menu/manage.py create_superuser && \
python tree_menu/manage.py runserver

Сервер запустится локально по адресу http://127.0.0.1:8000/

  1. Остановить приложение можно комбинацией клавиш Ctl-C.

Локальный запуск: Docker Compose/PostgreSQL
  1. Из корневой директории проекта выполните команду:
docker compose -f infra/local/docker-compose.yml up -d --build

Проект будет развернут в трех docker-контейнерах (db, web, nginx) по адресу http://localhost.

  1. Остановить docker и удалить контейнеры можно командой из корневой директории проекта:
docker compose -f infra/local/docker-compose.yml down

Если также необходимо удалить тома базы данных, статики и медиа:

docker compose -f infra/local/docker-compose.yml down -v

Запуск на удаленном сервере
  1. Сделайте форк в свой репозиторий.

  2. Создайте Actions.Secrets согласно списку ниже (значения указаны для примера) + переменные окружения из env_example файла:

PROJECT_NAME
SECRET_KEY

POSTGRES_PASSWORD
DATABASE_URL

CODECOV_TOKEN

DOCKERHUB_USERNAME
DOCKERHUB_PASSWORD

# Данные удаленного сервера и ssh-подключения:
HOST  # публичный IP-адрес вашего удаленного сервера
USERNAME
SSH_KEY  
PASSPHRASE

# Учетные данные Телеграм-бота для получения сообщения о успешном завершении workflow:
TELEGRAM_USER_ID
TELEGRAM_BOT_TOKEN
  1. Запустите вручную workflow, чтобы автоматически развернуть проект в трех docker-контейнерах (db, web, nginx) на удаленном сервере.

При первом запуске будут автоматически произведены следующие действия:

  • выполнены миграции БД
  • БД заполнена начальными данными
  • собрана статика
  • создан суперюзер (пользователь с правами админа) с учетными данными:
    • для Django: username = 'adm', password = 'adm' - значения можно изменить в tree_menu\app\management\commands\create_superuser.py
    • для Docker Compose - из переменных окружения ADMIN_USERNAME, ADMIN_EMAIL, ADMIN_PASSWORD

Меню представлены по адресу (в зависимости от способа запуска):

Вход в админ-зону осуществляется по адресу (в зависимости от способа запуска):

⬆️Оглавление


Описание работы:

На странице http://<hostname>/menu/ представлены четыре тестовых меню, при клике на название которых происходит переход на страницу данного меню. Возврат в главное меню происходит при клике В главное меню. Принцип работы приложения основан на выборке из БД всех пунктов меню, которые имеют в поле menu название выбранного меню. Название выбранного меню извлекается из url. Далее происходит отображение этого меню. При клике на пункт меню происходит рекурсивный поиск по извлеченным данным, чтобы построить список пунктов которые должны быть открыты на пути к этому пункту меню. Далее данный список передается в шаблон который выводит пункты меню, рекурсивно вызывая себя при выводе развернутых пунктов меню. Такой алгоритм позволяет обратиться к любому пункту меню указав в url только имя меню и его пункт. Например, при вводе url (в зависимости от типа локального запуска)

произойдет переход на пункт меню Menu item с отрисовкой всех уровней вложенности меню first menu на пути к этому пункту меню.

⬆️Оглавление


Удаление:

Для удаления проекта выполните следующие действия:

cd .. && rm -fr Django-tree_menu && deactivate

⬆️Оглавление


Автор:

Aleksei Proskuriakov

⬆️В начало