Эту статью пишу специально для аргументации идей, изложенных в моей книге: 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 для использования в небольшой компании, сотрудникам которой нужны лишь базовые функции подобной системы. Все описанное удалось сделать за один (!) час.