Pull to refresh

Aiogram + Django — бич индустрии чат-ботов

Reading time3 min
Views31K

Решил я тут пофрилансить для души, и увидел, что каждый третий проект по разработке чат-бота предполагает интеграцию веб-админки. В основном это касается онлайн-магазинов, где заказчик пытается сэкономить на сайте и заменить его монстрючим чат-ботом. При этом рулить проектом ему удобнее в привычной среде. Отсюда и возникает пунктик — "хочу админку". Функциональность этой штуковины обычно заканчивается на обновлении информации о товарах, назначении админов, управлении рассылками... в общем, простые манипуляции с базой, не более. Так вот, дефолтный разработчик, видя этот пункт, берет, мать ее, Django. Почему? Ну конечно, причина кроется в лени колхозить свою админку, и притащить красивую Джанговую реализацию кажется хорошей идеей. Заказчик, в свою очередь, гуглит топ веб-фреймворков и одобрительно кивает на сей перфоманс. А иногда и подливает масла в огонь, прямо в описании работы тегая Django.

Гордый Telegram Developer с 10-летним стажем
Гордый Telegram Developer с 10-летним стажем

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

Минусы интеграции Django:

  • Изначальная несовместимость фреймворков. Aiogram целиком работает на aiohttp и не тянет никаких синхронных зависимостей. То есть мы имеем плацдарм для реализации крутого fully-asynchronous проекта. И тянем, кхм, синхронный веб-фреймворк как важный (или не очень важный) микросервис.

  • Django ORM — главный минус, хоть и второй в списке. Первый был по большей части идеологический и смысловой, а этот уже про практику. Django ORM во всём уступает SQLalchemy. Она не умеет в асинхронность (аргументы про asgiref "sync_to_async" не принимаются), транзакции отключены по умолчанию, в целом медленная из-за ActiveRecord. Добавим, что использование этой ОРМ ограничено Джангой, и мигрировать при надобности вы будете, вероятно, с болью. В итоге мы имеем 2 пути: интегрировать 2 ОРМ сразу, что бред, или использовать только Джанговую, напрочь убивая весь смысл использования Aiogram.

  • Из пушки по воробьям (или как там в пословице говорится). Давайте не забывать, что Django — не только про ОРМ и админки. Это довольно монструозная зависимость с набором зачастую ненужных тебе тулзов. И не надо их тащить ради админки, ну пожалуйста. Не будет в твоем микросервисе ничего кроме ORM-запросов и view из сырого html. И эта (неудобная и странная) структура проекта Джанги будет лишь мешаться при разработке и масштабировании проекта.

Плюсы интеграции Django:

  • Не надо формошлепить — всё из коробки. 3 команды в терминале и рабочая админка готова. Формулируя короче: меньше действий для реализации MVP. На этом, пожалуй, плюсы закончились.

А как иначе?

У тебя 2 варианта.

- Убеждай и властвуй

Вариант, сразу предупрежу, маловероятный. Заключается в том, чтобы убедить заказчика, что админка ему в привычном понимании не нужна в принципе. Альтернативой предлагай интеграцию админки прямо в Telegram. Построить красивую и логичную админку на inline- и reply- кнопках можно, проверено на моем опыте. Для удобства работы со сложными меню, используй замечательный Aiogram Dialog.

Тут дам маленький совет.

Заказчик может сразу отвесить тебе оплеуху из консерватизма. И будет прав. Поэтому не поленись накидать MRE* и записать минутный скринкаст по использованию админки внутри Telegram. Шансы на успешное избежание в надобности целого веб-сервиса кратно растут. Я проверял.

*MRE — minimum reproducible example (минимально-воспроизводимый пример).

- Гордо поклонись

Если финт ушами из техники "Убеждай и властвуй" не прокатил, и веб-админку делать всё-таки придется, то воспользуйся нормальным инструментом, который подойдет по основным параметрам: легковесный (не в плане килобайт, а в количестве зависимостей), честно-асинхронный, легко интегрируемый и заменяемый на что-то другое. Короче, томить не буду, я настаиваю на FastAPI / Aiohttp (второй вообще из коробки с aiogram). Они тебе подойдут идеально. А сверстать 3 кнопки и таблицу на html займет от силы пару часов, поэтому серьезной проблемой это назвать нельзя.

Полезные материалы и ресурсы:

  • Темплейты для масштабируемых Telegram-Ботов: Шаблон (Tishka17), шаблон (мой), шаблон (bomzheg).

  • Книга по Aiogram для начинающих (от Groosha).

  • Aiogram Dialog — без этой библиотеки тяжело глубокую навигацию по кнопкам делать.

  • Мой бложик, на котором есть примеры моих проектов и более короткие статьи, не соответствующие формату Хабра.

Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
Total votes 27: ↑18 and ↓9+9
Comments24

Articles