Пишем Telegram бот для учёта расходов с Python, Asyncio/Aiogram, SQLite и Docker

Sdílet
Vložit
  • čas přidán 9. 07. 2024
  • Мой курс «Хардкорная веб-разработка» - course.to.digital
    Книжный клуб Ботаним!, где мы читаем хорошие ИТ-книги: botanim.to.digital/
    Telegram: t0digital.t.me
    Сказать спасибо за это видео можно здесь - boosty.to/digitalize.team
    В этом видео мы реализуем Телеграм бота для учёта личных расходов с бюджетом, категориями расходов и базовой статистикой. Использовать будем Python и Aiogram с Asyncio, в качестве базы данных легковесный движок SQLite, а результат работы упакуем в Docker контейнер для быстрого разворачивания на любом сервере.
    Исходный код на Github: github.com/alexey-goloburdin/...
    0:00 Telegram бот для учёта личных финансов
    0:43 ТЗ на бота
    3:01 Демонстрация работы бота
    5:07 Используемые библиотеки и технологии
    7:00 Aiogram
    7:29 Создание бота, получение токена
    8:30 Обход блокировки Telegram
    9:40 Инициализация бота
    10:36 Добавление расходов
    12:27 Модуль expenses
    18:22 Работа с категориями
    19:15 Структура БД
    21:49 Модуль работы с БД
    24:01 Продолжение по категориям
    25:35 Удаление расхода
    26:33 Просмотр расходов
    29:00 Статистики
    30:30 Docker
    33:00 Выводы
    /****************** about ******************/
    Меня зовут Алексей Голобурдин, я программирую с 2004 года и на этом канале делюсь своим опытом. Я основатель и руководитель компаний:
    - Диджитализируй digitalize.team, разрабатываем сложные IT системы для бизнеса;
    - Salesbeat salesbeat.pro, комплексный модуль доставки для интернет магазинов.
    Если у вас есть проект на разработку, пишите нам на hi@digitalize.team.
    С другими предложениями, а также если вам нужна одна или несколько индивидуальных консультаций/уроков по разработке (3000 руб/час), пишите мне на alexey@salesbeat.pro.
    Telegram канал - t.me/t0digital
    ВК - digitalize.team
    RuTube - rutube.ru/channel/24802975/ab...
    Дзен - dzen.ru/id/6235d32cb64df01e6e...

Komentáře • 484

  • @t0digital
    @t0digital  Před 6 měsíci +1

    Мой курс «Хардкорная веб-разработка» - course.to.digital
    Вжух!

  • @t0digital
    @t0digital  Před 4 lety +84

    С Новым 2020 годом, друзья! Как вам видос, узнали что-то новое-полезное? На разработку и запись ушло очень много времени, хочется верить, что материал принесёт пользу! Всем спасибо за ваши просмотры, лайки, комментарии - это очень помогает продвижению видео. До связи в Новом году!

    • @user-bq3ll8ph5j
      @user-bq3ll8ph5j Před 4 lety

      Спасибо за то, что ты делаешь! Чувствуется уверенность опытного профессионала, много полезного у тебя подцепил.

    • @t0digital
      @t0digital  Před 4 lety

      Спасибо, Денис!

    • @eugennegue3578
      @eugennegue3578 Před 4 lety

      Спасибо, действительно читаемый код, есть чему поучиться

    • @t0digital
      @t0digital  Před 4 lety

      @@eugennegue3578 Спасибо!

    • @nobeing6242
      @nobeing6242 Před 4 lety

      спс

  • @st_sergey9891
    @st_sergey9891 Před 4 lety +7

    Вот это здорово... Спасибо за труд, круто делаете. Успехов в новом году!

    • @t0digital
      @t0digital  Před 4 lety +2

      Спасибо! С Наступающим!

  • @ateemo
    @ateemo Před 3 lety +85

    когда в конце 2020 получаешь пожелание хорошего 2020. :mehh:

    • @t0digital
      @t0digital  Před 3 lety +6

      Хахахах :)

    • @2TenOClock2
      @2TenOClock2 Před 2 lety

      ага, да и телеграмм уже работает :)

    • @pavel_trpn
      @pavel_trpn Před 2 lety

      Уже середина 22-го а пиз**ц даже и не собирается уходить...

    • @sereginkozik7507
      @sereginkozik7507 Před rokem +5

      В конце 2022 понимаем, что 2020 оказывается был хорошим годом.

    • @sereginkozik7507
      @sereginkozik7507 Před rokem

      Привет из 2023!!! С рождеством христовым!!!

  • @antonnesterenko.
    @antonnesterenko. Před 4 lety +9

    Спасибо за тему - очень интересно развивать тему с такими практическими решениями для жизни. Если у тебя будет возможность пожалуйста продолжай такого рода решения практических задач!

  • @k_o_l_b_a_x8190
    @k_o_l_b_a_x8190 Před 4 lety +2

    Ай ждал! Прям НГ подарок! С наступающим

    • @t0digital
      @t0digital  Před 4 lety +1

      Йее:) Спасибо! С Наступающим 2020м!

  • @byclassicall
    @byclassicall Před 4 lety +1

    Спасибо, материал и его подача как всегда на высоте.
    С наступающим!

    • @t0digital
      @t0digital  Před 4 lety +1

      Спасибооо! С Наступающим!

  • @user-cr5xp4nt2y
    @user-cr5xp4nt2y Před 4 lety

    Отличное видео, Спасибо! С наступающим!

    • @t0digital
      @t0digital  Před 4 lety

      Спасибооо! С Наступающим!

  • @user-lz3ez3nn4j
    @user-lz3ez3nn4j Před 4 lety

    Спасибо, с Новым годом! Удачи!

    • @t0digital
      @t0digital  Před 4 lety

      Спасибооо, счастливого 2020го!

  • @ivanaytzhanov8846
    @ivanaytzhanov8846 Před 4 lety +15

    Спасибо за все эти полезные замечания по поводу организации кода, особенно про разделении архитектуры на "клей" и бизнес-логику (можно еще добавить сюда низкоуровневый код, если он есть). Вроде и так все понятно про это разделение, но с наглядным примером намного лучше усваивается

    • @t0digital
      @t0digital  Před 4 lety

      Согласен. Спасибо!

  • @canada946
    @canada946 Před 4 lety +2

    Как интересно рассказываете! Про функции которые начинаются с нижнего подчеркивания не знала раньше, спасибо. Рассказывайте чаще)

  • @user-qw7qh5tz2t
    @user-qw7qh5tz2t Před 4 lety

    С наступающим вас! Спасибо за видос под новый год!

    • @t0digital
      @t0digital  Před 4 lety

      Спасибооо, с наступающим!

  • @ArtemOsadchii
    @ArtemOsadchii Před 3 lety +11

    Спасибо за видео и отдельно за исходники на гитхабе. Очень полезно для тех, кто уже знает основы Python и хочет сделать какой-то реальный проект.
    Пожелания:
    1. В видео вы говорите про ТЗ. Если вы делали ТЗ к этому проекту, можно на него взглянуть? Очень хотелось бы посмотреть на примере, как оно должно выглядить, хотя бы для личного проекта.
    2. Мне лично не хватило (и, как я понял из коментов, многим остальным тоже) объяснений как задеплоить это приложение на сервер, на тот же Heroku. Как запустить на локальной машине понятно, но если действительно пользоваться этим ботом, то нужен запуск на сервере.

  • @sainco3036
    @sainco3036 Před 4 lety

    Спасибо и с наступающим!

  • @alexfish289
    @alexfish289 Před 4 lety +19

    Идеальный подарок на Новый Год.

    • @t0digital
      @t0digital  Před 4 lety

      Спасибо :) С Наступающим!

    • @LobanovSpace
      @LobanovSpace Před 4 lety

      Смотрю видео после нового года, тоже нормально)

  • @innocence3158
    @innocence3158 Před 4 lety +11

    Нереально суперское видео! С удовольствием посмотрел бы хоть 5 часов лайв разработки, интересно понять ход мыслей опытного разработчика :)

    • @t0digital
      @t0digital  Před 4 lety

      Спасибо! Сделаем возможно:)

  • @stabben
    @stabben Před 4 lety +7

    Спасибо за видео! Хотелось бы больше видео касающегося именно проектирования и архитектуры приложений

    • @t0digital
      @t0digital  Před 4 lety

      Буду делать материалы на эту тему обязательно

  • @user-pf8sy8en4b
    @user-pf8sy8en4b Před rokem +1

    Спасибо большое, очень полезный материал

  • @user-uo4ck4cp5d
    @user-uo4ck4cp5d Před 4 lety

    С наступающим!!!! Очень нравится канал) продолжайте в том же духе!! )))

    • @t0digital
      @t0digital  Před 4 lety +1

      Спасибо! Будем продолжать!

  • @user-rs5zq9hy4m
    @user-rs5zq9hy4m Před 4 lety +1

    Дождался урааа!! Спасибо!!
    Судя по просмотрам и комментариям тема ботов все еще популярна, но почему-то никто не снимает по ней ничего..

    • @t0digital
      @t0digital  Před 4 lety +1

      Боты популярны и, думаю, будут набирать ещё с ростом популярности нейросетей и лёрнига:)

  • @BLVCKxSONNET
    @BLVCKxSONNET Před 4 lety +2

    Благодаря такому качественному и познавательному контенту я научился нажимать кнопку "подписаться" и лайкать видео. Это просто шок, какой ты крутой! С наступившим тебя, спасибо за видео =)

    • @t0digital
      @t0digital  Před 4 lety

      Йеее, спасибооо! Приятно:) C Наступившим!

  • @user-jg2qv9tb9n
    @user-jg2qv9tb9n Před 3 lety +1

    Спасибо за видео!

  • @alekseysaltykov
    @alekseysaltykov Před 4 lety

    Спасибо! Вынес для себя полезную информацию

  • @tfxbhfv45688
    @tfxbhfv45688 Před 2 lety

    Тоже посмотрел от начала до конца, весьма познавательно для начинающего!

  • @user-fv2rw2mr2e
    @user-fv2rw2mr2e Před rokem

    Классное видео, так актуально, в голове картника сложилась по проекту и большой респект о лучших практиках программирования! 💯👍

  • @ananasios
    @ananasios Před 4 lety

    Да неужели 👍 очень ждал

  • @maxshishkn
    @maxshishkn Před 4 lety

    🔥🔥🔥
    с наступающим, котан 🐈😎

    • @t0digital
      @t0digital  Před 4 lety

      С Новым годом! Юхуу!

  • @z0uRChannel
    @z0uRChannel Před 3 lety +1

    Спасибо за видео

  • @user-hd2nb2ug9t
    @user-hd2nb2ug9t Před 4 lety +18

    Привет
    В одном из видео ты говорил, что сделаешь видео про фриланс(как брать заказ и тд) Очень нужная информация, заранее спасибо

    • @t0digital
      @t0digital  Před 4 lety +1

      Привет, делал опрос среди подписчиков - эта тема и вообще тема работы над проектами, управления проектами и подобные набрали мало желающих

  • @flokyantiles8060
    @flokyantiles8060 Před 4 lety

    Благодарю за отличный пример бота, лайк и подписка)

  • @ved_s
    @ved_s Před 4 lety +7

    В названии опечатка а так видео отличное! С наступающим новым годом!

    • @t0digital
      @t0digital  Před 4 lety

      О, спасибо, поправил:)

    • @manul7978
      @manul7978 Před 4 lety

      замечание - я думаю не стоит объяснять зачем нужно это приложение. Очень много зря времени на это ушло

    • @sergeys4732
      @sergeys4732 Před 4 lety +2

      @@manul7978 без тз результат хз!!!

  • @mihailbuldakov9424
    @mihailbuldakov9424 Před 4 lety

    с наступающим!)

  • @MrGamaliy
    @MrGamaliy Před 4 lety

    Отличный канал. Спасибо!

  • @alphabat3269
    @alphabat3269 Před 3 lety +1

    Спасибо! Очень классный учебный контент и пояснения.

  • @pskobar
    @pskobar Před 3 lety

    Вот очень интересно конкретно про боты телеграмма на питоне - давайте еще про боты

  • @Vlamir_ave_tonna
    @Vlamir_ave_tonna Před 4 lety

    С Новым годом! Успехов вам в новом году!
    Очень нравится ваша подача материала. Пожалуйста, расскажите про докер. Чем отличается от виртуальной машины, как настроить окружение и как переносить контейнеры.

    • @t0digital
      @t0digital  Před 4 lety +1

      С Новым 2020! Спасибооо!
      Расскажу про докер обязательно

  • @hinomuratomisaburo4901

    Спасибо круто!

  • @user-rt1fh6yr1j
    @user-rt1fh6yr1j Před 4 lety +131

    Спасибо за ролик.
    Хотелось бы посмотреть на процесс написания в лайве, пусть даже это будет и несколько часов видео.

    • @t0digital
      @t0digital  Před 4 lety +45

      Возможно как-нибудь сделаем такой лайв. Но это действительно будет очень долго - где-то с исследованиями как что работает, где-то с исправлениями ошибок, где-то с рефекторингом

    • @user-rt1fh6yr1j
      @user-rt1fh6yr1j Před 4 lety +39

      @@t0digital Хз, лично мне будет очень интересно). Как мне кажется, то многим кто активно учит Питон, тоже. Потомушо в большинстве русскоязычных видео с лайв-написанием чего-либо, авторы занимают позицию типа "Ну, вы повторяйте за мной и всё будет ок", без особых объяснений зачем в данный момент используется именно эта конструкция, что является хорошей/плохой практикой и почему и т.д. Ну и + чаще всего они пишут эхо-бота в тлг/калькулятор/что-то еще, что может поместится в короткий хронометраж.

    • @MrZasimovich
      @MrZasimovich Před 4 lety +8

      Іван Галицький аналогично, хотелось бы посмотреть именно вариант написания в реальном режиме с объяснениями, рефакторингом, исправлениями. Интересна практика написания опытных девелоперов/администраторов. Такие примеры экономят просто огромное количество времени на наработку своего опыта.

    • @t0digital
      @t0digital  Před 4 lety +39

      Значит попробуем делать видео с живым кодингом. Спасибо!

    • @MrZasimovich
      @MrZasimovich Před 4 lety +5

      @@t0digital Вам спасибо огромное, что не отказываете!

  • @Vorono4ka
    @Vorono4ka Před 2 lety +1

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

  • @user-cc6dt1jp2t
    @user-cc6dt1jp2t Před 3 lety +1

    досмотрит до конца! Несколько часов не беда. хотелось бы с вами это пройти и паралельно написать тоже самое, так как я новичек

  • @serdardurdyev4963
    @serdardurdyev4963 Před 4 lety

    Годно! Не понимаю, за что тебя хейтят)Все понятно говоришь)

  • @yermakov.oleksandr
    @yermakov.oleksandr Před 4 lety

    Очень интересный видео ролик, понравилась подача и стиль написания кода. Было бы интересно в будущем посмотреть как с нуля пишете проект и сразу комментируете его.

    • @t0digital
      @t0digital  Před 4 lety +1

      Спасибо! Такое видео в живом кодинге это часов на 5. Может как-нибудь сделаю:)

  • @AnGrigorev
    @AnGrigorev Před 4 lety +8

    Спасибо!
    С наступающим, всего и побольше))
    Всё пррсто и лаконично. Единственное, я бы файлик с БД вытащил из контейнера и просто маунтил при старте. А то докер пересобрал и всё пропало)

    • @t0digital
      @t0digital  Před 4 lety +1

      Да,, упустил этот момент, добавлю в репо:) С Наступающим!

  • @nmi2939
    @nmi2939 Před 4 lety

    Хорошее новогоднее поздравление =)

  • @sancho2238
    @sancho2238 Před 4 lety +3

    Очень интересный канал, странно что так мало подписчиков

    • @t0digital
      @t0digital  Před 4 lety

      Спасибооо! Растём понемногу:)

  • @Pendalf61
    @Pendalf61 Před 4 lety

    Удивительно, только придумал написать себе такого бота, даже проверил в каталогах, нет такого. Или я плохо искал. И на следующий день мне CZcams предлагает вот такое.)))
    Очень полезное видео, тем кто видит всё это (python, docker, sqlite) впервые видео будет очень сложным. Ну а тем, кто не пугается, и чувствует, что может разобраться, то это равносильно походу на неплохой курс по созданию телеграмм бота. Рекомендую с этим кодом плотно поработать и много полезного положите себе в голову.

  • @someelse989
    @someelse989 Před 4 lety +7

    С первых секунд лайк. Расскажи о своих книгах по программированию.

    • @t0digital
      @t0digital  Před 4 lety +8

      Расскажу в отдельном видео, спасибо!

  • @maslick
    @maslick Před 4 lety +25

    спасибо, хороший видос. добрая критика: учить английский! :-)

    • @t0digital
      @t0digital  Před 4 lety +5

      Есть такой план на 2020:) Спасибо!

    • @LobanovSpace
      @LobanovSpace Před 4 lety

      Я с вами мужики)

    • @passenger000
      @passenger000 Před 3 lety +2

      очень интересная подача, видео смотрятся на одном дыхании, но некорректные произношения и ударения прям убивают(

  • @Blowjin
    @Blowjin Před 3 lety +1

    Про ТЗ хорошее замечание, не задумывался раньше(

  • @user-lu7jx3lr8n
    @user-lu7jx3lr8n Před 4 lety +1

    Лайк не глядя)

  • @valkyreShm
    @valkyreShm Před 2 lety

    Спасибо! Чем больше смотрю, тем меньше говнокода и более читабельный код!

  • @worldtech2770
    @worldtech2770 Před rokem +1

    Подскажите пожалуйста , есть написанный скрипт, он каждый час парсит цены с одного магазина. и записывает в переменную в виде словаря, как сделать так что бы, если пользователь в телеграмме при выборе команды /мониторить ,скрипт каждый час проверял переменную и если по заданным настройкам есть данные то , пользователю присылать эти данные с словаря. У каждого пользователя свои настройки по товарам. Спасибо

  • @vrischikasana
    @vrischikasana Před 4 lety +6

    У кого проблемы с кодировкой при чтении категорий.
    нужно удалить файл ./db/finance.db
    и в файле db.py при инициализации ДБ нужно добавить параметр - encoding='utf-8'
    def _init_db():
    """Инициализирует БД"""
    with open("createdb.sql", "r", encoding='utf-8') as f:
    ......

  • @LobanovSpace
    @LobanovSpace Před 4 lety

    Отлично

  • @dnuykz
    @dnuykz Před 4 lety

    Только нашёл твой канал, и он хороший, хороший монтаж, отличный звук, а Голос это не голос это птичка поёт, лайк подписка

  • @romans.6049
    @romans.6049 Před 4 lety

    С наступающим. Хорошее и полезное видео. Про парсинг было бы ещё что то для начинающих

  • @user-oi1zl6de8i
    @user-oi1zl6de8i Před 4 lety +1

    Похоже, что автор канала решил сделать царский подарок своим подписчикам к Новому году. Ну что ж, спасибо.

    • @t0digital
      @t0digital  Před 4 lety +1

      Именно так:) С Наступающим!

    • @user-oi1zl6de8i
      @user-oi1zl6de8i Před 4 lety

      @@t0digital Спасибо, уважаемый.
      С наступающим Новым годом! Счастья, крепкого здоровья, любви и удачи в делах!

  • @user-gw3wi7is3n
    @user-gw3wi7is3n Před 4 lety +4

    Неделю назад пришла в голову идея сделать такого бота, а сегодня у тебя выходит видео об этом.Что это если не подарок на НГ?)

  • @OcenivayKoteni
    @OcenivayKoteni Před 4 lety

    Лаек, коммент, подписка

  • @eugenyskiter2174
    @eugenyskiter2174 Před 4 lety

    Отличное видео, хочется подробнее узнать про работу с переменными окружения

    • @t0digital
      @t0digital  Před 4 lety

      Спасибо! Расскажем

  • @mRelby13
    @mRelby13 Před 3 lety

    А можно ли поставить подобные "заглушки" (auth) для определённых команд?
    То есть, допустим есть команды /reset и /stats, и я хочу, чтобы на эти команды бот реагировал только в том случае, если её отправит владелец. А остальные команды будут доступны всем пользователям.

  • @andreym2502
    @andreym2502 Před 4 lety

    Побольше таких видосов о программировании на Python! Например: программа измерения скорости интернета, чат, чат с шифрованием, программа - даунлоадер

    • @t0digital
      @t0digital  Před 4 lety

      Спасибо! Будем делать

  • @gdd_burcklock7016
    @gdd_burcklock7016 Před 4 lety

    С новым годом) лучше наверное выносить в отдельную табличку алиасы чем писать их через запятую)

  • @Slava_tobi_Ukraine
    @Slava_tobi_Ukraine Před 4 lety

    Лучше работать над увеличением доходов, чем сокращением своего потребления когда зарплата маленькая. За видео спасибо!

    • @t0digital
      @t0digital  Před 4 lety

      Да, конечно. Просто при росте дохода всегда на столько же растут расходы и эффект большего дохода быстро сходит на нет, на большие покупки все равно надо копить:)

  • @Ardbot-fp8oq
    @Ardbot-fp8oq Před 3 lety

    0:19 2020 год... Отличный повод что бы начать прививать)

  • @user-bq3ll8ph5j
    @user-bq3ll8ph5j Před 4 lety +1

    Всех с праздником! 2020! Отличный год для подвигов и свершений!

    • @t0digital
      @t0digital  Před 4 lety

      Спасибо! С Новым 2020м годом!

  • @denefty5189
    @denefty5189 Před 4 lety

    Алексей Добрый день! Классный проект и подача подробная! Буду его пытаться сделать рабочим для множества юзеров, его логика оооочень похожа с моим задуманным ботом! Получается что почти всё уже готово осталось добавить многопользовательские возможности

    • @t0digital
      @t0digital  Před 4 lety +1

      Отлично, рад что полезно! Успехов с добавлением многопользовательского режима - БД я бы уже сменил на постгрес и возможно поставил какой-то ORM или просто несамописную обёртку над БД:)

    • @denefty5189
      @denefty5189 Před 4 lety

      @@t0digital Благодарю за направление!

  • @user-pt6gy1uk7x
    @user-pt6gy1uk7x Před 4 lety

    Спасибо за видео! Подскажите, почему вы пишите fetchall() вместо fetch_all() ?

    • @t0digital
      @t0digital  Před 4 lety +3

      Это устоявшееся название, в частности оно описано в PEP 249, которое формализует API библиотек для работы к БД www.python.org/dev/peps/pep-0249/
      Так в целом лучше назвать с разбивкой на слова, конечно

  • @klasdtigra
    @klasdtigra Před 3 lety +1

    33:34 ну надеюсь хотя б 21 нормальный будет) А вообще надо будет посмотреть, чё там люди сделали, может тоже пулреквестик кину

  • @omssky7397
    @omssky7397 Před 2 lety

    мб для aiogram имеет смысл и с бд что-то асинхронное придумать? aiosqlite например

  • @sergba
    @sergba Před 4 lety

    Котанизируй! Спасибо!

  • @temik4546
    @temik4546 Před 4 lety

    привет, ролик супер! не знаком особо с библой для телеги, туда можно вкрутить свои кнопки для бота? чтобы категории допустим висели и не надо было их набирать

    • @t0digital
      @t0digital  Před 4 lety +1

      Да, можно это сделать и в aiogram

  • @tomozi1
    @tomozi1 Před 4 lety +1

    Спасибо, отличное видео. Расскажите куда можно выложить готовое приложение; можно ли использовать телеграмм бота внутри локальной сети?

    • @t0digital
      @t0digital  Před 4 lety +1

      С телеграмом можно работать через long polling (бот опрашивает телеграм на наличие новых сообщений с какой-то периодичностью) и через веб-хуки (телеграм шлёт новые сообщения на указанный ему url). Для второго способа нужен свой сервер, настроенный на нем HTTPs, мы для этого простого бота используем первый вариант с long polling. То есть этот бот можно запустить откуда угодно, лишь бы был доступ к интернету. Я запускал его даже на телефоне в termux, работает.

  • @Dima-zr7go
    @Dima-zr7go Před 3 lety

    Необходимо сделать почти тоже самое но с 2..3 кнопками в каждом сообщении после нажатия на которых расскрывались доп инфа и шла запись в google Docs кто именно нажал .. Где бы посмотреть похожий пример?

  • @dmitryk9440
    @dmitryk9440 Před 4 lety

    С новым годом! Отличный подарок на новый год)
    Осталось парочку вопросов:
    1) я так понял по коду вы не сторонник sqlalchemy (orm). Если да, то как вы в django подменяете orm модели?
    2) в свое время работал с плохо оптимизированными бд под mysql, и понял что конструкции с join кушают много времени, лучше заменять их на нечитабельные where... Замечали ли вы такие баги в sqlite и postgress
    3) а на докере не правильно ли было создавать и активировать свое окружение? Как в проекте?

    • @t0digital
      @t0digital  Před 4 lety

      1) Просто не хотелось ставить ORM на 3 таблицы. В Django для простых вещей использую джанговый ORM, да. Но надо понимать, какие физически в базу уходят запросы от вашего ORM - иногда там такой трэш, что мама не горюй) ORM хорош только для простых запросов, которых, впрочем, большинство, а сложные пишутся на сыром SQL.
      2) Это вопрос к нормализации и денормализации базы. JOIN двух таблиц всегда работает медленнее, чем SELECT из одной таблицы, но появляются накладные расходы на поддержание целостности и актуальности данных, появляется дублирование данных. Всегда лучше начинать с нормализованной базы с JOIN'ами, не надо преждевременно оптимизировать, пока у вас нет миллионов записей и слишком долгих запросов.
      3) докер контейнер это и есть своего рода виртуальное окружение, в нём ведь только одно приложение будет крутиться, наше

  • @BogdanKozlovskyi
    @BogdanKozlovskyi Před 4 lety +6

    Алексей, спасибо огромное за видео! Как всегда очень круто, понятно и четко) один вопрос... я сейчас посещаю курсы по Python и мне практически все преподы говорят, что если есть возможность отказаться от использования регулярок, лучше так и делать. Как ты считаешь, насколько это мнение правдиво в Python сообществе и в чем проблема с регулярками?

    • @t0digital
      @t0digital  Před 4 lety +2

      Регулярки часто это единственный способ решить задачу. Ещё чаще это способ решить задачу в 2 строки кода, а без них будет гораздо больше кода с кучей циклов, проверок и тд. В регулярках не вижу ничего плохого, их многие не любят, потому что не знают - ну и они сложно читаются, надо уметь с ними работать, чтобы прочесть регулярное выражение. Для простых обработок текста они могут быть медленнее, чем просто поиск и замена по строке. Не знаю, что ещё можно отнести к их минусам.

    • @user-bq3ll8ph5j
      @user-bq3ll8ph5j Před 4 lety +3

      Существует такая присказка: «У программиста была проблема и он решил применить регулярные выражения..... теперь у программиста две проблемы». Разберись и пойми работу регулярных выражений и тогда для тебя они станут не вопросом, а инструментом.

    • @user-pt6gy1uk7x
      @user-pt6gy1uk7x Před 4 lety

      @@user-bq3ll8ph5j но останутся вопросом для других членов команды))

    • @user-bq3ll8ph5j
      @user-bq3ll8ph5j Před 4 lety +1

      @@user-pt6gy1uk7x пусть догоняют :) Не занижай планку из-за тех, кто не хочет\может учиться.

    • @user-pt6gy1uk7x
      @user-pt6gy1uk7x Před 4 lety

      @@user-bq3ll8ph5j да не, будет не так - какой-нибудь коллега решит что и так все знает и на глаз там че нить поменяет. На этот конкретно этот случай не будет конечно же юнит тестов. И в самый ответственный момент оно навернется)

  • @user-xx7so4wo5h
    @user-xx7so4wo5h Před 3 lety

    Спасибо за ролик! Какой шрифт используется при написании кода, если не секрет?

  • @tfxbhfv45688
    @tfxbhfv45688 Před 2 lety

    Скажите, есть ли у Вас видео, раскрывающее хорошую практику работы с машиной состояний (МС)? Например, когда бот должен провести > 1 анкетирования пользователя. Как понимаю, для каждого такого анкетирования МС должна быть размещена отдельно? Спасибо.

    • @t0digital
      @t0digital  Před 2 lety

      такого видео у меня нет

  • @primegod
    @primegod Před 4 lety

    Спасибо! Будет, что поковырять на выходных.

  • @colonizatorgg5960
    @colonizatorgg5960 Před 4 lety +3

    С наступающим!! Алексей, а подскажи куда прятать бизнес логику в джанге? Обычно всё во views.py кидаю

    • @t0digital
      @t0digital  Před 4 lety +18

      Спасибо, с наступающим! На самом деле это большая проблема джанги, что она в официальной документации не даёт рекомендаций по тому, куда писать основную логику, или даёт корявую рекомендацию писать её в models.py. Я просто создаю в модуле с Django application внутри пакет services и в нём пишу основную логику. То есть
      | manage.py
      | conf
      | some_app
      | __init__.py
      | apps.py
      | models.py
      | services
      | service1.py
      | service2.py
      | views.py
      И из views.py уже вызываю логику, которая лежит в services. Такую логику можно вызывать и из соседних Django приложений в проекте.

    • @colonizatorgg5960
      @colonizatorgg5960 Před 4 lety

      @@t0digital Спасибо за развернутый ответ)

  • @Victoria2396
    @Victoria2396 Před 3 lety

    Спасибо за прекрасное видео 😊 Что посоветуешь новичку, который мало знаком с питоном, но нормально освоил aiogram? Что по питону стоит пройти/прочитать, чтоб больше соображать по функциям 😃

    • @t0digital
      @t0digital  Před 3 lety

      книжки почитать нужно - любые по питону, которые понравятся, их сейчас масса

  • @karpievichvadim772
    @karpievichvadim772 Před 4 lety

    Задеплоил вашего бота на сервер, теперь изучаю структуру. Спасибо за топ-контент и комменты в коде!
    PS. Может кому поможет: при запуске на удаленном сервере была ошибка: no such column: true и пришлось переписать под старую скьюэльку с 1 и 0 вместо true и false, новую поставить не удалось....

  • @dadyarri
    @dadyarri Před 4 lety

    Спасибо, очень полезный ролик.
    А будет видео по докеру?

    • @t0digital
      @t0digital  Před 4 lety +1

      Думаю, что да, будут

  • @Resulok
    @Resulok Před 4 lety

    Привет, спасибо за видео. Только один вопрос в чём преимущества использования Docker? Ведь я могу всё просто запустить в терминале, ведь так ?

    • @t0digital
      @t0digital  Před 4 lety +1

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

  • @PhilippeRigovanov
    @PhilippeRigovanov Před 4 lety

    Father на современном английском произносится как [ˈfaːðə], но Алексей использует произношение из древнеанглийского через æ, видимо лингвист или любитель древних языков. Спасибо большое за годный контент и отдельное спасибо за исходники на гитхабе.

    • @t0digital
      @t0digital  Před 4 lety +1

      Спасибо :) в этом году буду прокачивать разговорный английский :)

  • @googleadmin4749
    @googleadmin4749 Před 2 lety

    На 29:47 когда дополнительно запрашиваются "базовые расходы" отдельным запросом, нет проверки на наличие таких расходов в базе, как это сделано на предыдущем этапе.
    Если "базовых расходов" не будет то то будет ошибка при получении данных, стоит добавить еще проверку.
    UP: сорян я ошибся не дочитал код, там в ином случае присваивается 0 если таких расходов нет.

  • @ivanscm
    @ivanscm Před 4 lety

    Спасибо за видео. По какой причине не была использована ORM и было потрачено время на написание своей обертки? Почему файл базы не прокинули из докера?

    • @t0digital
      @t0digital  Před 4 lety

      В актуальной версии на гитхабе базу из докера вынесли. ORM посчитал лишним для 3х таблиц, обёртки крайне простые.

  • @boenia
    @boenia Před 2 lety

    Как его выложить в телеграм? Или если нужен отдельный хостинг - как его вылить туда и подключить к телеграму?

  • @eamarc
    @eamarc Před 4 lety +1

    Все отлично. Немного смущает:
    row_id = int(message.text[4:])
    В блок try просится (это пользовательский ввод и /delAll свалит бота)
    В контроллере categories_list генерируется answer_message по какой-то причине (например сам класс Categories мог бы этим заняться)?

    • @t0digital
      @t0digital  Před 4 lety

      Тестов надо написать на всё, конечно. Да, вы правы, надо обернуть в try-except, конечно. По 2 вопросу - да, можно перенести формирование в Categories. Хотя по-хорошему я бы возвращал из бизнес-логики не строки, а структуры типа dict или namedtuple, а сообщеньку всё же собирал в контроллере, это всё-таки уже его логика, контроллера. Если захотим в одном контроллере вывести один текст, а в другом другой, будет хорошо, если сам текст сообщения будет формироваться в контроллерах.

  • @Free_474
    @Free_474 Před 4 lety +1

    Спасибо за материал !! А случайно нет апи с Тинькофф? Чтоб не заводить расходы ручками

    • @t0digital
      @t0digital  Před 4 lety +1

      Не изучал - но вероятно есть, да

  • @swimmwatch
    @swimmwatch Před 3 lety +2

    Пересмотрел видос спустя год. Когда прокачал docker, python и т.д. Так кайфанул при просмотре видоса :)
    Спасибо больше.
    Можете пожалуйста сделать видос про docker, docker-compose в духе видоса по postgresql.

  • @helo6691
    @helo6691 Před 4 lety

    Прикольная чашка. :) У меня точно такая. Я покупал в Южной Африке, а ты где?

  • @div3975
    @div3975 Před 3 lety

    В связи с работой с БД возник вопрос: насколько оправданно использование ORM (например, peewee)? Так сказать, плюсы-минусы-подводные камни.

  • @DaniShakiroffree
    @DaniShakiroffree Před 4 lety

    19:15 А как работает foreign key между полем category_codename (integer) из таблицы expense и полем codename (varchar) из таблицы category?

    • @t0digital
      @t0digital  Před 4 lety

      Крайне странно, что оно работает))) это ошибка, конечно. Оба поля должны быть varchar. Не поменял в процессе рефакторинга

    • @DaniShakiroffree
      @DaniShakiroffree Před 4 lety

      @@t0digital Ваше видео, кстати, появилось у меня в рекомендациях, чему я крайне рад, спасибо за контент

  • @alexeysokolov3473
    @alexeysokolov3473 Před rokem

    Не понятно, на полинге или на вебхуках сделано? На каком сервере запущено? Сколько это стоит?

  • @sarafarron7844
    @sarafarron7844 Před 2 lety

    ох это начало нового десятилетия, если бы ты знал

  • @mihailneprostoi6584
    @mihailneprostoi6584 Před 4 lety

    Что за книга у тебя лежит на столе? Она одна и та же всегда или в разных выпусках разная? Видос как обычно великолепен!

    • @t0digital
      @t0digital  Před 4 lety +1

      Спасибооо! Книжка по-разному, это - Python к вершинам мастерства

  • @BersGriffith
    @BersGriffith Před 2 lety

    2022 год! Телеграм можно юзать без прокси) уииии!

  • @constantinemanoilo5148

    Лайк за видео. Почему отдали предпочтение кастомым запросам в БД, а не с, например, SQLAlchemy?

    • @t0digital
      @t0digital  Před 4 lety +2

      Без большого смысла. Показалось, что несколько запросов проще послать руками, чем прикручивать еще 1 зависимость

  • @tfxbhfv45688
    @tfxbhfv45688 Před 2 lety

    Заметил, что метод fetchall(...) в db.py возвращает List [Dict [str, Any]]. Так и должно быть? Спасибо.

    • @t0digital
      @t0digital  Před 2 lety

      Код сейчас уже не помню, но в целом такой тайп хинтинг может быть - список словарей, ключами которых является строка, значениями любой тип