Skip to content

LzrdDragon/employeetree

Repository files navigation

Здравствуйте, меня зовут Дмитрий

Typing SVG

Древовидная структура подразделений компании с выводом сотрудников

Формулировка задания

Разворот проекта

1. Docker

Если у вас Mac на архитектуре ARM, то перед разворотом на Docker'е необходимо прописать следующую команду (там есть баг с libpq):

export DOCKER_DEFAULT_PLATFORM=linux/amd64

Команда для разворота проекта:

docker-compose up --build -d

или просто

docker-compose up --build

чтобы видеть логи

Главная страница будет доступна по адресу: localhost
Административная панель: localhost/admin/
Админ логин: admin
Админ пароль: admin

Если возникли проблемы с nginx и 80 портом, например, на Ubuntu, необходимо сделать следующее:

  1. Останавливаем все контейнеры
docker-compose down
  1. Удаляем все контейнеры
docker rm -fv $(docker ps -aq)
  1. Смотрим какие сервисы используют 80 порт
sudo lsof -i -P -n | grep 80
  1. Удаляем мешающий сервис
sudo kill <process id>
  1. Заново запускам наши контейнеры
docker-compose up --build

2. Классический через manage.py со своей базой

Прежде всего необходимо создать базу и задать её параметры в файле ".env", который находится в одной дериктории с модулем "settings.py". Я использовал PostgreSQL, поэтому дефолтные настройки заданы для неё, точнее для Docker контейнера с ней.

Переместитесь в дерикторию с manage.py

  1. Установим зависимости
    1.1 Если у вас Unix система:
pip install ../requirements/requirements-unix.txt
  1. Установим зависимости
    1.2 Если у вас Windows система:
pip install ../requirements/requirements-win.txt
  1. Создадим миграции (на всякий случай, они уже должны быть)
python manage.py makemigrations
  1. Выполним миграции
python manage.py migrate
  1. Соберём статические файлы
python manage.py collectstatic --noinput
  1. Создадим супер юзера (воспользуемся кастомной командой)
    (--force нужен, чтобы создать супер юзера даже если 1 или несколько уже созданы)
python manage.py initadmin --user=admin --password=password --force=True
  1. Запускаем проект
python manage.py runserver

Описание

Основной язык программирования: Python 3.10.4
Framework: Django 4.1.2

Язык на Frontend'е: JavaScript
С использоваинем: jquery в качестве AJAX framework'а для асинхронных запросов к бэку
Web Framework: Bootstrap

База данных: PostgreSQL 14

Структура проекта классическая, за исключением того, что я добавил модуль services.py для логики, которую хочется вынести из views.py, но не хочется добавлять в models.py, чтобы не "раздувать" модели и не было проблем с кольцевым импортом.

Из интересного

При открытии URL рендерится только структура подразделений, их конечно может быть много, но не миллионы, да и тысячи вряд ли, так что это должно работать быстро

Если в подразделении есть сотрудники, то при открытии подразделения высвечивается кнопка "Показать сотрудников", при нажатии на которую, отправляется AJAX запрос с id подразделения на бэк с помощью jquery, ответ собирается в html и вставляется на страницу(выводится список сотрудников). Запрос отправляется только в том случае, если это первое нажатие на кнопку, далее сворачивается и разворачивается уже отрендеренный html

В админке добавлены разные фильтры, поля поиска. Можно выбрать тему

Ограничения для админки имплементировал на уровне модели, чтобы точно нельзя было записать в базу ошибочные данные

About

Avdeev Test Task

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published