Эту статью пишу специально для аргументации идей, изложенных в моей книге: realbigdata.ru. Цель описанной далее работы - оценить скорость создания собственной CRM с минимальным функционалом (спойлер: меньше часа). В этой системе будет всего 4 базовых сущности, которые нужны всем CRM:
- Клиенты.
- Продавцы (они же пользователи системы).
- Заказы клиентов.
- Коммуникации с клиентами (когда кому последний раз звонили и о чём договорились).
Для создания такой системы будем использовать фреймворк (набор инструментов) под названием django. Он сделан специально для создания систем, похожих на новостные сайты, в которых есть административный раздел, где пишутся новости, и публичный раздел, где читаются новости. По логике CRM нам не нужен публичный раздел, поэтому ограничимся только административным разделом, в который сотрудники нашей компании будут входить для редактирования данных о клиентам и коммуникаций с ними.
Django написан на языке программирования Python, который дети проходят в школе, поэтому работодателю не составит труда найти специалиста по этому языку.
В процессе разработки будем буквально проходить по первым двум главам официального учебника django.
Засекаем время, приступаем к установке и разработке. Устанавливаем django:
pip install django
Создаём папку проекта "intranet":
django-admin startproject intranet
Отредактируем файл intranet/urls.py, изменим там путь к панели администрирования. Сделаем его путём на титульную страницу сайта, чтобы при заходе на сайт сразу открывалась форма авторизации. Ведь всё содержимое системы будет доступно только сотрудникам после вводи логина и пароля. Оставим в файле следующие строчки:
from django.contrib import admin urlpatterns = [ path('', admin.site.urls) ]
Приступаем к разработке CRM. Создаём приложение внутри проекта:
python3 manage.py startapp crm
Теперь выполним первую миграцию, чтобы у предустановленных приложений всё наладилось. Выполняем команду:
python3 manage.py migrate
По умолчанию django использует базу данных sqlite. Не будем утруждаться изменением её на полноценную *SQL версию. Потому что всё общение с базой у django и так проходит "под капотом". Для нас нет разницы, мы не будем писать SQL запросы в чистом виде.
Теперь надо открыть файл crm/models.py. Там надо прописать программный код для управления таблицами базы данных. Так как в системе будет всего четыре сущности (включая продавцов, о которых сейчас не говорим), то код в этом файле будет выглядеть так:
import datetime from django.db import models from django.utils import timezone # Клиенты class Client(models.Model): # ФИО клиента full_name = models.CharField(max_length=200) # Дата рождения клиента birth_date = models.DateTimeField("День рождения") def __str__(self): return f'{self.full_name}' # Заказы клиентов class Order(models.Model): # Привязка к клиенту client = models.ForeignKey(Client, on_delete=models.CASCADE) # Описание заказа descr = models.CharField(max_length=200) # Адрес доставки address = models.CharField(max_length=200) # Стоимость заказа votes = models.DecimalField("Стоимость заказа", max_digits=5, decimal_places=2) # Факт оплаты заказа is_paid = models.BooleanField("Заказ оплачен?", default=False) # Дата создания заказа pub_date = models.DateTimeField("Дата создания", auto_now_add=True) def __str__(self): return f'Заказ №{self.id} - {self.client} - {self.address}' # Коммуникации с клиентами # (когда кому последний раз звонили и о чём договорились) class Communication(models.Model): # Привязка к клиенту client = models.ForeignKey(Client, on_delete=models.CASCADE) # О чём договорились с клиентом text = models.CharField(max_length=200) # Дата коммуникации pub_date = models.DateTimeField("Дата коммуникации", auto_now_add=True) def __str__(self): return f'Коммуникация №{self.id} - {self.client} - {self.text}'
После сохранения файла идём в общий файл проекта intranet/settings.py и добавляем туда "crm.apps.CrmConfig" к установленным приложениям:
INSTALLED_APPS = [ "crm.apps.CrmConfig", "django.contrib.admin", "django.contrib.auth", ... ]
В этом же файле в блок MIDDLEWARE добавляем 'django.middleware.locale.LocaleMiddleware', чтобы в административной панели сайта надписи были на языке пользователя (иначе на английском):
MIDDLEWARE = [ 'django.middleware.locale.LocaleMiddleware', 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', ... ]
Подготавливаем миграцию и выполняем её, чтобы в базу данных были внесены изменения:
python3 manage.py makemigrations crm
python3 manage.py migrate
Теперь перейдём к созданию и настройке административного раздела сайта. Сотрудники нашей компании будут входит в этот раздел и вести там свою работу: добавлять данные о клиентах, их заказах и переговорах с ними. Этот раздел мы не будет программировать вручную, он уже есть у django. Конечно, в нём сотрудники могут натворить много беды: удалить данные клиентов и т.п. Но будем рассчитывать, что в компании работают адекватные люди, которые будут в состоянии вести подобный примитивный учёт без полного уничтожения данных.
Для начала создаём суперпользователя:
python3 manage.py createsuperuser
Отвечаем на вопросы, вводим мэйл и пароль нового пользователя.
Запускаем сервер:
python3 manage.py runserver
Можно указать порт и ip, на котором запускать:
python3 manage.py runserver 0.0.0.0:8080
Открываем страницу http://ip_сервера:8080/ и видим форму авторизации. Вводим в неё данные суперпользователя.
В панели управления находим страницу настроек групп пользователей и добавления новых. Там создаём группу обычных сотрудников компании. Разрешаем им изменять данные в приложении CRM. Но не даём возможности удалять клиентов (они могут только создавать).
Далее добавляем в систему учётные записи сотрудников, каждому сотруднику свою личную.
Теперь настроим отображение нашего приложение crm в административной панели. Для этого в файле crm/admin.py пишем следующее:
from django.contrib import admin from .models import Client, Order, Communication admin.site.register(Client) admin.site.register(Order) admin.site.register(Communication)
Перезагружаем титульную страницу сайта в браузере и видим, что теперь там есть возможность изменять все сущности: клиентов, заказы и коммуникаций. На этом надо остановить таймер, потому что система готова. Оказалось, что для создания простейшей CRM нам потребовалось менее одного часа. Конечно, система выглядит топорно, а часть надписей в панели администратора вообще на английском. Но в этой системе уже есть минимальный функционал, который нужен для работы компании:
- Авторизация для сотрудников через логин/пароль.
- Информация о клиентах, их заказах и коммуникациях.
Некоторые могут возразить, что в такой системе недостаточно полей. Но это вопрос лишь одной строки в файле crm/models.py, содержимое которого описывалось выше. То есть изменить систему можно за считанные минуты, подстроив под бизнес процессы. И в отличии от обычной CMS это будет бесплатно.
В такую систему уже можно добавлять информацию, с ней уже можно работать. При этом на её создание ушёл всего один час времени. А если потрудиться не один час, а пару дней, то можно добавить ещё много украшений и функций. Например, можно сортировать список клиентов, чтобы сверху оказывались те, с кем давно не было коммуникации и т.п.
Эта статья была написана исключительно с одной целью - засечь время создания простейшей CRM для использования в небольшой компании, сотрудникам которой нужны лишь базовые функции подобной системы. Все описанное удалось сделать за один (!) час.
Читайте больше в моей книге: realbigdata.ru.
Про автоматическое написание программ:
https://www.securitylab.ru/news/544402.php