Как не расстрелять свои ноги с Django, транзакциями и исключениями

Мой курс «Хардкорная веб-разработка» - course.to.digital
Книжный клуб Ботаним!, где мы читаем хорошие ИТ-книги: botanim.to.digital/
Telegram: t0digital.t.me
Как не хапнуть проблем с Django, транзакциями и исключениями? Рассказываю, как не повторять наших ошибок:)
0:00 Почему с этим надо разобраться
0:56 Что такое транзакции
1:52 Поднимаем демо проект с Django
3:10 Создание Django модели в проекте
4:03 Создание Django view для изучения проблемы
5:47 Пара бизнес-сервисов
7:39 Пример без транзакции
9:01 Три варианта транзакций в Django
12:49 Проблема, тадаааамс!
18:33 Чего мы хотим?
19:23 Пишем Django Middleware
22:32 Преимущества и самое важное
/****************** 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...

Пікірлер: 232

  • @abdullayeff6597
    @abdullayeff65972 жыл бұрын

    Благодарю за видео! Сама идея заворачивать весь view в транзакцию очень плохая, так как там может быть не только работа с базой, но ещё какие-то шаги. Например, rest-запрос на какой-то сервис (возможные проблемы с сетью или нагруженностью третьего сервиса, долгий ответ). И пока эти этапы будут производиться у вас будет висеть открытая транзакция в базе, что очень плохо скажется на производительности. Но, если вы обернете в транзакцию лишь сервисный слой, который работает сугубо с базой, у вас транзакция откроется только в момент работы с базой и закроется в нужный момент. Плюс во view вы сможете поймать исключение которое было сброшено в сервисном слое, ибо оно уже откатило транзакцию

  • @MrLotrus
    @MrLotrus2 жыл бұрын

    Спасибо! Накидываю темы, которые было бы круто послушать в твоей интерпретации: 1. Сигналы. Как их использовать, когда полезны. 2. Работа с ORM и с raw queries. Когда что использовать, какие-то фишки со сложными запросами. 3. Работа с сессиями 4. Работа с auth. Создание кастомного юзера, токены, свои менеджеры для него.

  • @user-ks4lh2xb1f

    @user-ks4lh2xb1f

    2 жыл бұрын

    Сюда же накину, если автор не против. 5. Работа с миграциями, data миграции, миграции в команде (git) и миграции при работе с несколькими основными ветками staging и prod например (git). 6. Таски (celery etc.) - соответственно фишки, кроны, чейны и т.д. 7. Кэш - польза, применение и т.д. Прошу прощения если какая-то из тем уже есть на канале.

  • @dr.margulis7773

    @dr.margulis7773

    2 жыл бұрын

    Ох, это будет топ-годнота!

  • @limonred5283

    @limonred5283

    2 жыл бұрын

    Вангую перенаправят вас с вашими аппетитами на курс)) Но темы класс, плюсую)

  • @t0digital

    @t0digital

    2 жыл бұрын

    1. Сигналы - отстой, не надо их использовать:) Заколебаться потом искать, кто где меняет данные. 2. Что тут было бы интересно? Я предпочитаю использовать джанговых ORM на простых запросах и писать сырой SQL на сложных запросах, но в целом раз уж юзать ORM, то стоило бы и на сложных запросах использовать ORM (бенефиты автоматического рефакторинга IDE будут доступны и тп). Но я не могу заставить себя учить очередной птичий язык очередного ORM плюс не доверяю ему на сложных запросах. В оракловой БД есть подсказки для БД, которые вставляются в SQL, и подсказывают оптимизатору, как лучше выполнять запрос. Какой тут ORM:) В постгрес такого нет, но я всё равно скептически отношусь к ORM для чего-то сложного. 3. Сессии. Ну, они есть, джанговый механизм вполне юзабелен и описан docs.djangoproject.com/en/3.2/topics/http/sessions/, что по нему интересно? 4. Auth и кастомный юзер - да просто AbstractUser реализуй и в путь:) docs.djangoproject.com/en/3.2/topics/auth/customizing/#using-a-custom-user-model-when-starting-a-project 5. Миграции. Вопрос интересный, но мне хочется больше деталей вопроса. Миграции в команде? Ну мержить придется, тут других выходов нет, кажется:) 6. Celery - злющее зло, все не доходят руки выпилить его к едрене фене с проектов, но однажды точно дойдут. Cron лучше, чем celery beat. Для асинхронных задач, запускаемых из джанго вьюшек, надо найти какую-то замену Celery, сам Celery не нравится. И DRF тоже не нравится. Но Celery больше:)

  • @PurpleDaemon_

    @PurpleDaemon_

    2 жыл бұрын

    @@t0digital А чем конкретно Celery + beat не нравится? У нас пара десятков воркеров с ним, свои задачи выполняет стабильно.

  • @jvpt8285
    @jvpt82852 жыл бұрын

    Вот это было полезно,прям по работе. Огромное спасибо за вашу работу!

  • @yupe_team
    @yupe_team2 жыл бұрын

    Имхо, транзакции лучше стартовать, коммитеть и откатывать явно в коде. Вешать старт транзакции на все эндпоинты проекта - ну так себе идея.

  • @t0digital

    @t0digital

    2 жыл бұрын

    Если есть уверенность, что никто нигде не забудет обернуть нужный функционал в транзакцию - то да

  • @pin689

    @pin689

    2 жыл бұрын

    Однозначно. Именно поэтому любой фреймворк - говно, потому что надо знать кучу магии которая происходит внутри фреймворка, чтобы написать программу чуть сложнее чем hello world. А если самому стартовать транзакции никакой фреймворк нафик не нужен

  • @user-nx5cy4pw9g

    @user-nx5cy4pw9g

    2 жыл бұрын

    @@t0digital ну тут вопрос решается достаточно просто. Прежде чем начать реализовывать кусок кода необходимо включить головушку, посидеть подумать, хорошенько расписать задачу и только потом кодить :)

  • @AlexeyAbrosimov

    @AlexeyAbrosimov

    2 жыл бұрын

    ​@@pin689 чтобы написать программу чуть сложнее чем hello world - фреймворк и не нужен, а не любой фреймворк - говно. Фреймворк относится к стеку знаний, обладая которыми вы можете прийти в проект и быстрее начать работать над задачами. Он уменьшает объем проектных знаний, которые кому-то вам потребуется объяснить и кучу особенностей как там все написано в каждом конкретном проекте, какие библиотеки используются, когда и какие вызывать, костыли и т.п. Фреймворк задает структуру как писать, где писать: компоненты так и там, вьюхи там, контроллеры там. Т.е. задает частичные ограничения снижая вероятность написания чего-то своего непонятно где и как попало. И чем больше свободы действий, тем больше увеличиваете объем проектных знаний, которые будут накапливаться. Они вам вряд ли пригодятся в другом проекте, а человек, который прийдет из вне будет 3 месяца изучать всю кухню структуры проекта. Там и без этого хватит бизнес логики в которую придется вникать, добавлять сюде еще самописные костыли со структурой, которая будет только в этом проекте - заведомо усложнять жизнь другим и себе в будущем при разрастании проекта. Обладая знаниями фреймворка вы уже придя в проект понимаете, чем будете пользоваться и как. Вам эту огромную часть не нужно уже объяснять, чтобы вы начали писать код. Как-то так приблизительно.

  • @pavelbotovkov3353
    @pavelbotovkov33532 жыл бұрын

    Никогда и ни за что не отдам консистентность данных каким то левым миддл-чувакам! Спасибо за видео, плотность информации на единицу времени поражает.

  • @andreikoptev7861
    @andreikoptev78612 жыл бұрын

    При работе с транзакциями также полезно использовать метод on_commit. Позволяет совершить действия после того, как транзакция закоммитилась и объект действительно записался в бд. Ну и по мне все-таки обрабатывать транзакции явно в коде, а не передавать глобально в настройки

  • @user-md1pv7qg3u
    @user-md1pv7qg3u2 жыл бұрын

    Так и знал, что будет топовый видос!)

  • @temik26
    @temik262 жыл бұрын

    Хоть и не связывался с транзакциями, но видос - топ! Побольше такого контента. Спасибо тебе!

  • @ilyachudakov7944
    @ilyachudakov79442 жыл бұрын

    Очень круто! Ждём больше таких историй!

  • @AlexeyFyodorov80
    @AlexeyFyodorov802 жыл бұрын

    Это единственный из каналов, на которые я подписан, на котором ни одного выпуска не пропускаю. И у которого рейтинг роликов 15% - это вообще как так? Обычно если 5% значит годно, 10% - топчик, а тут 15%? Космический канал с космическим автором. Надеюсь на долго и счастливо ) продолжайте пожалуйста

  • @expollux

    @expollux

    2 жыл бұрын

    Что за рейтинг роликов? Где его посмотреть?

  • @AlexeyFyodorov80

    @AlexeyFyodorov80

    2 жыл бұрын

    @@expollux да просто посмотри, какой у ролика % лайков по отношению к количеству просмотров. На сейчас 821 лайк к 7600 просмотров - примерно 11%. Это очень много.

  • @zproger
    @zproger2 жыл бұрын

    Очень интересно, спасибо за труд!

  • @Sapere_aude_
    @Sapere_aude_2 жыл бұрын

    Благодарю за видос и ваш труд🔥😎

  • @rockkley9159
    @rockkley91592 жыл бұрын

    Офигенно полезное и поучительное повествование. Спасибо огромное!

  • @jdueioksltoirtius9685
    @jdueioksltoirtius96852 жыл бұрын

    Информация от Мастера! Респект и благодарность!

  • @valarg5756
    @valarg57562 жыл бұрын

    Спасибо большое. Почаще бы видео, всегда очень интересно

  • @user-lz3ez3nn4j
    @user-lz3ez3nn4j2 жыл бұрын

    Очень полезное видео, спасибо за труд!

  • @user-mc3de3et3b
    @user-mc3de3et3b2 жыл бұрын

    Достойный материал, спасибо!

  • @exemplles
    @exemplles2 жыл бұрын

    Мне как для новичка эта инфа является неоценима полезной. Thx

  • @ibrahimgadzhimagomedov8978
    @ibrahimgadzhimagomedov89782 жыл бұрын

    Большое спасибо, Алексей, очень полезное видео!

  • @johnb7657
    @johnb76572 жыл бұрын

    Как всегда ТОП!

  • @tihon4979
    @tihon49792 жыл бұрын

    Бомба! Большое спасибо. Тема очень актуальная и нигде ранее не видел такого способа. Буду юзать. Ну и на flask теперь буду пробовать такое реализовать.

  • @bezborodovanton
    @bezborodovanton Жыл бұрын

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

  • @t0digital

    @t0digital

    Жыл бұрын

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

  • @NoName-lu7jf
    @NoName-lu7jf Жыл бұрын

    Как по мне более простым решением будет обернуть в блок try except контекстный менеджер с выполнением всех необходимых запросов. Я проверял и вроде как работает абсолютно идентично тому, что показанно в видео.

  • @ilyachudakov7944
    @ilyachudakov79442 жыл бұрын

    И мастер-класс по Виму - бесконечно можно повторять 😎😎😎

  • @Geolimber
    @Geolimber2 жыл бұрын

    Полезно. Как раз велосипедил это на своём проекте.

  • @user-sf9nn6dh2q
    @user-sf9nn6dh2q2 жыл бұрын

    Спасибо!) отличное видео!

  • @cs_dequeue
    @cs_dequeue Жыл бұрын

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

  • @mikhailsavchuk2850
    @mikhailsavchuk28502 жыл бұрын

    Очень полезно! Спасибо!

  • @nikolay1944
    @nikolay19442 жыл бұрын

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

  • @t0digital

    @t0digital

    2 жыл бұрын

    Рад, что полезно!

  • @user-je6dz7vz4y
    @user-je6dz7vz4y Жыл бұрын

    Мега полезный материал. Огромное спасибо🔥🔥

  • @toomanof
    @toomanof2 жыл бұрын

    Многим огромное кол-во нервов сохранил!)

  • @bpospanov
    @bpospanov2 жыл бұрын

    офигенное видео, спасибо большое

  • @user-qp8hg4ds2b
    @user-qp8hg4ds2b Жыл бұрын

    Шикарное видео, спасибо!

  • @alexnoodles8290
    @alexnoodles82902 жыл бұрын

    Ох Гуру! Респект Вам

  • @yabanciyim
    @yabanciyim2 жыл бұрын

    Благодарю за видео. Только начел учить django - не всё понятно, но очень интересно)))..

  • @toomanof
    @toomanof2 жыл бұрын

    Очень полезное видео!!!!

  • @user-ic7yy2nc8l
    @user-ic7yy2nc8l2 жыл бұрын

    Большое спасибо за инфу!!!

  • @jamoliddinbakhriddinov1148
    @jamoliddinbakhriddinov11482 жыл бұрын

    Миллиард лайков! Спасибо большое

  • @user-pg8ry1tm3t
    @user-pg8ry1tm3t11 ай бұрын

    Прекрасно! Спасибо большое!!

  • @andreivolkau8532
    @andreivolkau85322 жыл бұрын

    Огонь 🔥

  • @ncd4008
    @ncd4008 Жыл бұрын

    Вы лучший, на данный момоент я начинающий программист, ваши ролики макимально полезны, они реально поднимают уровень))))

  • @Baha996
    @Baha996 Жыл бұрын

    Спасибо за ролик! Очень полезный ролик

  • @pashadjoystick
    @pashadjoystick Жыл бұрын

    очень доступно добрый ты человек :) в плане основной темы о транзакциях ! но перебор когда файл урлов инклюднул ссыль с другого файла урлов в другом подкаталоге - если я правильно понял. ибо мне это напомнило как заумные ООП-щики сделали простую прогу на 40 классов и сами потеряли нить в своей писанине)) потом мой друг переписал их творение в 2 класса по 10 строчек и она заработала - он просто свёл их классы. я то понимаю чем больше каскадов тем сильнее абстрагирование - но как бы рекурсии не вышло при 40 классах между 12-м классом и 27-м :)

  • @user-km9te2tl3s
    @user-km9te2tl3s2 жыл бұрын

    Отличное видео, не знал, что можно таким образом зафейлить транзакцию. Большое спасибо!

  • @SantaCluster

    @SantaCluster

    2 жыл бұрын

    кстати, отличная идея запилить серию видосов с вариантами неочевидных выстрелов в ногу - "как неожиданно зафейлить {something}"

  • @maximkuchiga141
    @maximkuchiga141 Жыл бұрын

    реально полезное видео! спасибо!

  • @guckyukon259
    @guckyukon2592 жыл бұрын

    Огонь!

  • @damizi64
    @damizi642 жыл бұрын

    пока "Не мой уровень дорогой")) но когда нибудь точно пригодится. спасибо!

  • @marlo3464
    @marlo34642 жыл бұрын

    2:03 не поиметь проблем, а что-бы проблемы не поимели. Видос топ.

  • @user-nb3cv9bq9r
    @user-nb3cv9bq9rАй бұрын

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

  • @t0digital

    @t0digital

    Ай бұрын

    Спасибооо!

  • @thegovyadina
    @thegovyadina2 жыл бұрын

    "Явное лучше неявного" /The Zen of Python/. Именно поэтому делать такую миддлварь и "доносить до членов команды" в серьезном проекте я бы не стал, а использовал бы контекстный менеджер. Состав команды может меняться, проект может переехать в другой отдел или передан на аутсорс. Где-то в этом процессе сакральное знание (сколько еще подобных неявных моментов появится в проекте?) затеряется и не донесется.

  • @t0digital

    @t0digital

    2 жыл бұрын

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

  • @denismaleev3848

    @denismaleev3848

    Жыл бұрын

    документацию нормальную пишите к проекту и все будет ок

  • @RaZeR22L
    @RaZeR22L2 жыл бұрын

    Спасибо!

  • @ChannelYoJo
    @ChannelYoJo2 жыл бұрын

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

  • @t0digital

    @t0digital

    2 жыл бұрын

    Если уверены, что никто нигде не забудет обернуть нужный функционал в транзакцию - то да, это будет работать более эффективно, но с бОльшим риском однажды получить неконсистентные данные в БД.

  • @ihorkovryhin1767

    @ihorkovryhin1767

    2 жыл бұрын

    @@t0digital Так у Вас та же проблема. Все будет работать если все будут помнить что ошибки ловить нельзя. В чем разница?

  • @t0digital

    @t0digital

    2 жыл бұрын

    @@ihorkovryhin1767 ничего нигде не делать легче, чем везде делать, не находите? Взять правило не обрабатывать ошибки, которые должны улететь клиенту - легче, чем везде реализовывать транзакции

  • @ihorkovryhin1767

    @ihorkovryhin1767

    2 жыл бұрын

    @@t0digital Обрабатываем ошибки в проекте мы довольно часто и с учетом, что работа с базой может быть в глубине различных вызовов понять, что мы обработали ошибку которую не нужно было обрабатывать весьма не тривиальная вещь. Я не говорю что одно решение лучше другого, просто хотел обратить внимание на то, что не все так однозначно хорошо. Явное лучше чем не явное. Атомарные запросы хороши для простых проектов, но чем сложнее наша система, тем больше подводных камней будет вылазить. Когда система разрастется до того уровня, что пора бы уже контролировать транзакции и не делать их длинною в жизнь, то добавить транзакции будет весьма не тривиальной задачей.

  • @t0digital

    @t0digital

    2 жыл бұрын

    @@ihorkovryhin1767 ну куча запросов к бд в 1 http запросе это все равно плохо, даже не применительно к транзакциям, и куча долгих запросов к БД в рамках 1 хттп запроса это тоже плохо - стартовать транзакции на все запросы это особенно плохо, когда БД запросов много в каждом http запросе и они долгие, база начнет вешать всё

  • @limonred5283
    @limonred52832 жыл бұрын

    Стакан на фоне - красноречив) И придает фактуру происходившей дичи))

  • @b.g.5106
    @b.g.51062 жыл бұрын

    Спасибо. Хотелось бы увидеть про работу Jsonb из Postgresql в питоне. В ютубе очень мало видео на эту тему ❗️

  • @alexandermaretskiy3984
    @alexandermaretskiy39842 жыл бұрын

    чтобы выйти из sqlite shell или из любой другой интерактивной оболочки (zsh,sh,bash,......) достаточно послать управляющую последовательность exit, то есть просто нажать Ctrl+D

  • @maskon78
    @maskon78 Жыл бұрын

    Вот спасибочки!

  • @malbec21digital
    @malbec21digital2 жыл бұрын

    Полезное видио, спасибо 😉 Хотел уточнить по курсу, оно подойдёт разработчику, который уже год в разработке или это больше для начинающих?)

  • @t0digital

    @t0digital

    2 жыл бұрын

    Всем полезно, кто незнаком сильно с предметом обсуждения

  • @digital-acsais2451
    @digital-acsais24512 жыл бұрын

    Спасибо за видео. Получается, что Atomic requests стоит использовать не для всего проекта, а только для тех приложений (задач), в которых нужны транзакции? К примеру, биллинг.

  • @hackprime
    @hackprime2 жыл бұрын

    Спасибо за видео, очень полезная информация! Но у меня дополнительный вопрос. Подобное поведение с неоткаченной транзакцией при отловленном в try/except исключении проявляется только если ATOMIC_REQUESTS активирован (True)? Или это вообще стандартное поведение при любом объявлении миграции, включая декоратор и with?

  • @amigo4884
    @amigo48842 жыл бұрын

    Привет! Спасибо за видео. Вопрос не по теме: тебе хватает диагонали экрана твоего ноута, или хотел бы побольше (как у старого)?

  • @t0digital

    @t0digital

    2 жыл бұрын

    Мне хватает, нормально, но это дело привычки/вкуса

  • @TheFunkogolik
    @TheFunkogolik2 жыл бұрын

    Привет) классные видео. Будет ли что-нибудь по wagtail? мы на работе почти все проекты в нем делаем) на чистом джанго почти ничего нет.

  • @zimitoyo
    @zimitoyo2 жыл бұрын

    Нужно помнить что после integrity error или database error внутри транзакции, обращение к базе вызовет исключение

  • @user-km9te2tl3s

    @user-km9te2tl3s

    2 жыл бұрын

    Блин, спасибо!! Не понимали, почему у нас на проекте периодически что-то падало

  • @DimiEG
    @DimiEG2 жыл бұрын

    Спасибо большое. Полезно и интересно. Что это у Вас за плагинчик в Nvim такой? Чё то он шибко умный этот линт. ;) Кстати, а вот если WEB приложение отправляет запрос в базу данных и она такая большая, что на получение информации надо несколько секунд. Как добиться чтобы приложение не фризелось и выводило пользователю страничку с какой нибудь крутящейся байдой типа «подождите, выполняю запрос?»

  • @user-hw8fj5hj9s
    @user-hw8fj5hj9s2 жыл бұрын

    Уважаемый ,Диджитализируй!. А в коде джанго не стоит ли флажок "сохранять запросы в БД сразу как внесли их " при чем еще при ее открытии ,как у API sqlite3 в connect(....,isolation_level=None)? Или не отсутствует ли метод "отката" после ошибки ? Может проще в потрохах джанги исправить ? П.С. Сам место создания и открытия БД в коде не нашел,у меня с инглишом не очень.

  • @user-xf1ec4lc3f
    @user-xf1ec4lc3f2 жыл бұрын

    Добрый вечер, очень крутой контент, давно смотрю Вас, было бы круто, если расскажите, как вы провайдите сервисы в ui слой, на примере Django. ЛАЙК, ЧТОБЫ УВИДЕЛ, ОЧЕНЬ ИНТЕРЕСНАЯ ТЕМА ))

  • @user-kt2pf5bf5m
    @user-kt2pf5bf5m Жыл бұрын

    С мидлварами интересный прием, спасибо. Но вот когда я работал с транзакцией, у меня ещё мудренее ошибка была. При откате транзакции не применяются изменения в экземпляре класса модели. В базе у нас отказ сделан, а при обращении к атрибутам модели отката как бы нет.

  • @vadimsmoke
    @vadimsmoke2 жыл бұрын

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

  • @yaroslavtkachenko1687
    @yaroslavtkachenko16872 жыл бұрын

    Как продолжение, хотелось бы услышать мнение автора на реализацию атомарности при использовании СУБД postgresql и GEVENT в джанге

  • @a_kruglov
    @a_kruglov2 жыл бұрын

    В чем проблема взять управляемую транзакцию, и перед success делать commit() а в except вызывать rollback() ?

  • @masynchin
    @masynchin2 жыл бұрын

    Немного оффтопный вопрос. Как используя ДРФ и JS-фронт работать с аутентификацией? Точнее, делать эндпоинты для получения себя, а в АПИ прокидывать уникальный идентификатор пользователя?

  • @mrkhloud
    @mrkhloud2 жыл бұрын

    Полезная фича. Спасибо

  • @user-ux8dk3ih4u
    @user-ux8dk3ih4u2 жыл бұрын

    познавательно!

  • @AlexGott
    @AlexGott2 жыл бұрын

    Агонь!!!!

  • @namalnikmisartenko8785
    @namalnikmisartenko87852 жыл бұрын

    Могу тебе еще подкинуть приколов) Попробуй создать env для питона 2 на маке м1 =) Тоже нормуль тема =)

  • @koljasha_nafman
    @koljasha_nafman2 жыл бұрын

    Спасибо! Интересно и полезно. Пару вопросов по рабочему процессу. Почему Neovim, раньше был просто vim, и что за плагин такой, в результате чего получается IDE?

  • @t0digital

    @t0digital

    2 жыл бұрын

    Это pyright lsp server. Сделаю материал по настройке

  • @narekbektashyan

    @narekbektashyan

    2 жыл бұрын

    @@t0digital Очень ждём)

  • @trankov
    @trankov2 жыл бұрын

    Полезность 20 из 10

  • @anatolyiredko9817
    @anatolyiredko9817 Жыл бұрын

    Ты крут !!!

  • @begula_chan
    @begula_chan10 ай бұрын

    класс!

  • @mikhaillermontov8228
    @mikhaillermontov82282 жыл бұрын

    С drf тоже будет работать ?

  • @bolatu8273
    @bolatu82732 жыл бұрын

    Лайк через 6 секунд после публикации:)

  • @zafaryusupov9455
    @zafaryusupov94552 жыл бұрын

    Можно Видео про масштабирование базы на нескольких серверах ?

  • @IlyaShaforostoff
    @IlyaShaforostoff2 жыл бұрын

    интересное расследование, понравилось. хотя на питоне вообще не пишу )))

  • @user-hn6jb4ub5h
    @user-hn6jb4ub5h2 жыл бұрын

    Я думал в 2021 программисты стали недосягаемо круты, а оказалось, что зная ДОС и скрипты для онлайн игрушек можно за 10 минут въехать в тему...

  • @t0digital

    @t0digital

    2 жыл бұрын

    Ан нет, мы досягаемо круты:)))

  • @rgbrs4149
    @rgbrs41492 жыл бұрын

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

  • @t0digital

    @t0digital

    2 жыл бұрын

    Великоват для водки:)!

  • @rgbrs4149

    @rgbrs4149

    2 жыл бұрын

    @@t0digital возможно размер стакана пропорционален количеству проблем с проектом)))

  • @ilyashevelev9256
    @ilyashevelev9256 Жыл бұрын

    Получается нужно избегать try except при запросах в orm или вообще во всех случаях?

  • @user-vl8pk3yr2g
    @user-vl8pk3yr2g2 жыл бұрын

    Ценное видео

  • @t0digital

    @t0digital

    2 жыл бұрын

    Спасибо!

  • @user-rg4fs5ys5w
    @user-rg4fs5ys5w2 жыл бұрын

    Здравствуйте! Вопрос немного не по теме, хотел бы услышать ваше мнение. Работаю разработчиком БД, в работе используем Oracle, Teradata, Greenplum, Informatica(ETL). Опыт работы - 1 год. Знаю ДС на хорошем уровне(изначально им занимался, но предложили другую должность). Получаю в целом неплохо, 150+. Просто про базы данных всегда так вскользь упоминают, про ETL тоже особо не говорят. Как вы считаете, не стоит ли сменить направление, если говорить о перспективах и дальнейшей востребованности. Спасибо за ответ!

  • @t0digital

    @t0digital

    2 жыл бұрын

    Привет! Спецы БД, ETL и тп зарабатывают нормально. Oracle, большие корпорации, нормально, если это ваше:) А вот если чувствуете, что это не ваше (неуютно себя чувствуете в корпорации или таких проектах для enterprise бизнеса), то можно подумать о переходе. Надо заниматься тем, что драйвит. Если текущее драйвит - отлично, если нет - ищите, что будет драйвить.

  • @user-zg2bx5cb3d
    @user-zg2bx5cb3d2 жыл бұрын

    неовим?) Алексей, ждём видео!

  • @user-kq8nk5vj5r
    @user-kq8nk5vj5r4 ай бұрын

    Не понял про последний вариант, там запись в БД вообще происходит(открывается транзакция СУБД) или нет, а откат как выполняется? Из кода на видео это не ясно. Такое чувство, что тут типа ленивого выполнения кода, т.е. сперва обе функции "как-бы" выполняются(без реальной записи в БД) и если все ОК, то оно выполнит запись в БД(создаст соотв-ие транзакции и т.п.).

  • @user-vi8hj2hu2k
    @user-vi8hj2hu2k2 жыл бұрын

    В чём сила, брат? В middleware!

  • @t0digital

    @t0digital

    2 жыл бұрын

    Точно!

  • @ashotvantsyan9028
    @ashotvantsyan90282 жыл бұрын

    Привет, большое спасибо за видео. Я хотел бы попросить вас поделиться вашей текущей конфигурацией vim.

  • @t0digital

    @t0digital

    2 жыл бұрын

    Спасибо! Да, я хочу ещё донастроить и потом сделаю материал по настройке, сейчас линтер ругается в одном месте, где нет ошибок, хочу выяснить почему и как пофиксить

  • @ashotvantsyan9028

    @ashotvantsyan9028

    2 жыл бұрын

    @@t0digital Я правильно заметил, что это neovim а не vim enhanced?

  • @t0digital

    @t0digital

    2 жыл бұрын

    @@ashotvantsyan9028 nvim, yes

  • @user-pl8bp5ot9y
    @user-pl8bp5ot9y2 жыл бұрын

    Автор, будет ли в Вашем исполнении Санта Лючия на итальянском? Как будто Энрико Карузо реинкарнировался и теперь ведет канал про Пейтон. Та же форма лица, черты. Да даже улыбка такая же.

  • @sawfriendship
    @sawfriendship Жыл бұрын

    А почему rollback не использовать?

  • @platonlukyanov13
    @platonlukyanov132 жыл бұрын

    На глазах видео появилось

  • @ShadowStormlq5mwdasd
    @ShadowStormlq5mwdasd Жыл бұрын

    Мне на секунду показалось, что это какой-то заключённый, который выстрелил

  • @user-em7zt1kr3u
    @user-em7zt1kr3u2 жыл бұрын

    Ни куя себе ты vim шумахер 😳. Круто 👍

  • @sergzach
    @sergzach2 жыл бұрын

    А код в проекте хороший?

  • @guiterenzog2723
    @guiterenzog2723 Жыл бұрын

    Как это работает? Имя функции должно быть именно process_exception? В нее обязательно надо передавать request? Зачем классу __call__? Заранее благодарю, если ответите.

  • @t0digital

    @t0digital

    Жыл бұрын

    process_exception это метод, который надо переопределить у класса Middleware, это описано в доке Django: docs.djangoproject.com/en/4.1/topics/http/middleware/#process-exception Про __call__ там тоже описано

  • @guiterenzog2723

    @guiterenzog2723

    Жыл бұрын

    @@t0digital, еще раз спасибо!

  • @LG-mf6pr
    @LG-mf6pr2 жыл бұрын

    Видео очень доходчивое, классное, Но один Вопрос.... то что exception не возвращает статус 500 (а кидает 200) это так и надо или так можно ? )

  • @t0digital

    @t0digital

    2 жыл бұрын

    Технически можно вернуть что угодно, конечно. 500ка это означает неожиданную ошибку сервера, если обрабатываемый сценарий именно такой, значит, стоит вернуть 500ку. Но фронтенд может ожидать всегда 200 или как-то не так обрабатывать 500ку, как вам нужно, такое тоже бывает, зависит и от фронтенда

  • @LG-mf6pr

    @LG-mf6pr

    2 жыл бұрын

    @@t0digital Понял, спасибо Вам )

  • @constantinemanoilo5148
    @constantinemanoilo51482 жыл бұрын

    Отправлять клиенту 500 ошибки такое себе решение. 500 ошибка - это ошибка сервера, а это значит, что если сервер падает на таком запросе, и такое поведение не ожидаемо, значит код работает неправильно. Для таких случаев нужно использовать Sentry, или что-то подобное, где разработчики могут сами видеть ошибки своих серверов. Если сентри использовать неохота, то этот middlware использовать для таких целей. Иначе, клиенту возвращать 4xx ошибки

Келесі