KEMBAR78
Python, Django и корпоративные информационные системы | PDF
Python, Django
и корпоративные информационные системы
1
Qapla!
2
http://recallmasters.com
Anatoly Scherbakov
Team lead
altaisoft@gmail.com
http://vk.com/altaisoft
http://facebook.com/altaisoft
Enterprise Software
3
О чём речь?
Корпоративный софт хранит и обрабатывает
значительную часть критически важных для
жизни компании данных
4
Кто этим пользуется?
5Все кому не лень
vs
Компания
Это бывает даже у червячков
6
ERP-система
Автоматизирует всё и всех
даже сильных и независимых
7
Пример: стоматология
● Запись на приём
● Расписание
● Робот
● Хранение истории
● Планирование материалов
● Планирование закупок
● Бухгалтерия
● Налоговая отчётность
8
Чего мы добились?
● Средняя полная стоимость: $4.5 млн (Panorama Consulting, 2015 г.)
9
Чего мы добились?
● Средняя полная стоимость: $4.5 млн (Panorama Consulting, 2015 г.)
● Частота неудач: 75%(Shaun Snapp, 2014 г.)
10
Чего мы добились?
● Средняя полная стоимость: $4.5 млн (Panorama Consulting, 2015 г.)
● Частота неудач: 75%(Shaun Snapp, 2014 г.)
● Мировые затраты(Gartner, 2017):
○ 2017 г. -- $395 млрд
○ 2021 г. -- $500 млрд
11
Чего мы добились?
Большинство предприятий
никогда не будет автоматизировано
12
Особенности и требования
● Простые вычисления
13
Особенности и требования
● Простые вычисления
● Их много
14
Особенности и требования
● Простые вычисления
● Их много
● Данных ещё больше
15
Особенности и требования
● Простые вычисления
● Их много
● Данных ещё больше
● Много внешних взаимодействий
16
Особенности и требования
● Простые вычисления
● Их много
● Данных ещё больше
● Много внешних взаимодействий
● Высокая скорость изменений
17
Особенности и требования
● Простые вычисления
● Их много
● Данных ещё больше
● Много внешних взаимодействий
● Высокая скорость изменений
● Каждый бизнес индивидуален
18
Особенности и требования
● Простые вычисления
● Их много
● Данных ещё больше
● Много внешних взаимодействий
● Высокая скорость изменений
● Каждый бизнес индивидуален
● Бесконечный жизненный цикл
19
Страна должна знать своих героев
20
...и многие
другие
...и спасаться от них
● Trello
● Мегаплан
● JIRA
● Моё дело
● Эльба
● 1С
● ...в общем тоже много
21
+ собственный софт
Как спасти мир?
И автоматизировать его
по самое не хочу?
22
Элементарно, Ватсон
У нас есть Python!
23
Python для корпоративной разработки
● Код быстро пишется
24
Python для корпоративной разработки
● Код быстро пишется
○ Но медленно выполняется?
25
Python для корпоративной разработки
● Код быстро пишется
○ Но медленно выполняется?
● Выразительная сила
26
Python для корпоративной разработки
● Код быстро пишется
○ Но медленно выполняется?
● Выразительная сила
○ Для лапшестроителей?
27
Python для корпоративной разработки
● Код быстро пишется
○ Но медленно выполняется?
● Выразительная сила
○ Для лапшестроителей?
● Сообщество, библиотеки, фреймворки,
инструменты, среды разработки
28
Фреймворки?
● ORM
29
Фреймворки?
● ORM
● Веб-интерфейс
30
Фреймворки?
● ORM
● Веб-интерфейс
● API
31
Фреймворки?
● ORM
● Веб-интерфейс
● API
● Фоновые задачи
32
Фреймворки?
● ORM
● Веб-интерфейс
● API
● Фоновые задачи
● Workflows
33
Фреймворки?
● ORM
● Веб-интерфейс
● API
● Фоновые задачи
● Workflows
● Предметные модули
34
Odoo
Pro
● Предметные модули
● ORM
● MVC
● Odoo-RPC
● Интерфейс
● Отчёты
Contra
● Закрытость
● XML везде и всюду
http://odoo.com | http://tryton.org 35
ERPNext / Frappé
Pro
● Предметные модули
● Аккуратная архитектура
● Celery
● Jinja2
● AJAX UI
Contra
● ORM: DocType
● Управление моделями в UI
● Отсутствие миграций
http://erpnext.org | https://frappe.io
36
И всё
37
Как же сделать идеальную ERP?
38
Без понятия.
Значит, подойдём с другой стороны
У нас есть Django!
● ORM удобная
39
У нас есть Django!
● ORM удобная
○ Но не идеальная
40
У нас есть Django!
● ORM удобная
○ Но не идеальная
● MVT
41
У нас есть Django!
● ORM удобная
○ Но не идеальная
● MVT
○ жЫрные модели
42
У нас есть Django!
● ORM удобная
○ Но не идеальная
● MVT
○ жЫрные модели
● Удобная админка
○ Но не вполне что надо
43
У нас есть Django!
● ORM удобная
○ Но не идеальная
● MVT
○ жЫрные модели
● Удобная админка
○ Но не вполне что надо
● Python
● Батарейки
44
Нужно больше!
45
Отчёты: django-import-export
class RecallsReport(ReportResource):
rev_by = fields.Field(
column_name='Reviewed By',
attribute='rev_by',
widget=widgets.ForeignKeyWidget(
User,
field='username'))
...
class Meta:
model = models.Recall
fields = export_order = ['id', 'parent', 'rev_by']
https://github.com/django-import-export/django-import-export
46
Интерфейс: django-crude
class RecallListView(SuperuserRequiredMixin, TableView):
model = Recall
filter = QueryBuilderFilter(...)
table_class = RecallsTable
template_name = 'recalls/recall_list.html'
actions = ReportAction(report_types=['recalls'])
...
CBV | django-import-export | django-filter | django-tables2 | django-querybuilder 47
Интерфейс: django-crude
48
Запросы: django-querybuilder
CBV | django-filter | http://querybuilder.js.org
49
viewflow
class HelloWorldFlow(Flow):
process_class = HelloWorldProcess
start = flow.Start(...).Next(this.approve)
approve = flow.View(...) 
.Permission(...) 
.Next(this.check_approve)
check_approve = (
flow.If(lambda activation:
activation.process.approved)
.Then(this.send)
.Else(this.end)
)
... Michael Podgursky @kmmbvnr https://github.com/viewflow/viewflow 50
Перспективы
● Больше батареек
51
Перспективы
● Больше батареек
● Готовые бизнес-модули
52
Перспективы
● Больше батареек
● Готовые бизнес-модули
● Распределённая архитектура
53
Перспективы
● Больше батареек
● Готовые бизнес-модули
● Распределённая архитектура
● Интеграции
54
Перспективы
● Больше батареек
● Готовые бизнес-модули
● Распределённая архитектура
● Интеграции
● Процесс разработки и документирование
55
Зачем это было?
Чтобы показать тенденции и
перспективы
и узнать мнение коллег
56
Вопросы?
57

Python, Django и корпоративные информационные системы