Warning
Этот проект был опубликован 14 мая 2024 года как тестовое задание при прохождении собеседования. Он не поддерживается, не является актуальным, и размещён публично только в целях изучения, выявления слабых мест и ошибок. Сам проект представляет собой сервис для динамического онбординга с шаблонизацией для пошагового опционального ведения клиента. В нём имеются недочёты, среди основных: жёсткая связность с фреймворком, хрупкость системы, поверхностная реализация.
- Анкетирование потенциальных клиентов, с целью использования собранной информации для повышения конверсии в закрытие сделки отделом продаж.
- Автоматическая преднастройка системы: показать необходимые разделы для данного типа и вида бизнеса, скрыть все то, что не релевантно.
В конечной реализации это может быть полезно для внедрения большего количества информативных вопросов (их должно быть больше чем дробящих дерево) без долгой затраты времени. Условно выстроив дерево мы сможем на каждом уровне легко добавить или убрать вопросы не вникая в дерево.
Конечной целью было реализовать отправку вопросов поочерёдно, вне зависимости от того является ли вопрос информативным или меняющим ветку. Отдельной задачей было динамическое обновление (подгрузка) информации на страницу.
Изначально было запланировано сделать несколько форм:
- опциональный выбор (для ветвлений и вопросов не требующих ввода)
- строковые (для ввода имени, почты и т д)
- для целочисленных значений (вопросы по типу кол-ва людей в команде)
- для дробных (площадь зала)
Но после реализации шаблона опционального выбора понял, что зачастую при первом знакомстве можно обусловиться категориями вместо уточнения всех чисел.
Задача была “изолировать” составляющего вопросы и просматривающего ответы от главных моделей. Таким образом получилось создать две модели для вопросов и ответов, 13 моделей для хранения информации о бизнесах пользователей и 1 модель для хранения пользовательских данных.
В дереве много условных ветвлений ради ветвлений, но для задач проекта не требовалась правдоподобность.
def __str__(self):
return (
# [Зависимость от вопроса: "ответ для этой ветки"] Текущий вопрос
f"{f'[{str(self.depends_on.order) + ". " + str(self.depends_on.title)}: "{self.depends_key if self.depends_key else 'ANY'}"] ' if self.depends_on else ""}" + f"{str(self.order)}. " + self.title
)
Для создания зависимостей между вопросами было добавлено два поля:
- поле зависимости для установления зависимости от другого вопроса (выделено красным)
- ключ (ответ который нужно дать в предыдущем чтобы попасть на этот, выделено синим)
1. Создание и активация виртуального окружения
Переходим в нужную директорию, создаём виртуальное окружение
> python -m venv .venv
Активируем его
> .venv\Scripts\activate
2. Клонируем репозиторий
> git clone https://github.com/cloudsucker/onboard.git
Переходим в корневую директорию проекта
> cd onboard
3. Установка зависимостей
> pip install -r requirements.txt
4. Запуск
Перед запуском необходимо убедиться, что вы находитесь в директории приложения:
> cd onboard
Ваша рабочая директория должна выглядеть так:
.../onboard/onboard
Запускаем Django-приложение
> python manage.py runserver
- Django >= 5.0.6
- pip-tools >= 7.4.1
По всем вопросам: [email protected]