Бизнес-логика в Django и архитектура Django проектов - на настоящем примере

  Переглядів 140,158

Диджитализируй!

Диджитализируй!

День тому

Мой курс «Хардкорная веб-разработка» - course.to.digital
Книжный клуб Ботаним!, где мы читаем хорошие ИТ-книги: botanim.to.digital/
Telegram: t0digital.t.me
Сказать спасибо за это видео можно здесь - boosty.to/digitalize.team
Django остаётся самым популярным Python веб-фреймворком в мире, однако архитектура большинства проектов на нём, мягко говоря, оставляет желать лучшего. В этом мастер-классе мы на живом примере поговорим о структуре Django проекта, бизнес-логике в Django, а также о хороших практиках проектирования кода.
0:00 О чём пойдёт речь, постановка задачи
2:17 Создание проекта
3:50 Создание моделей
7:39 Создание первоначальных Django Views
25:21 Анализ полученного начального кода
26:07 Рефакторинг
40:40 Вынос бизнес-логики в отдельный слой
54:09 Анализ полученного кода, финальный рефакторинг
Создание бизнес-сервисов
/****************** 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...

КОМЕНТАРІ: 350
@t0digital
@t0digital 4 місяці тому
Мой курс «Хардкорная веб-разработка» - course.to.digital Вжух!
@nogod7377
@nogod7377 3 роки тому
Диджитализируй: *выпускает видео* Я: *ставлю лайк и иду рефакторить*
@t0digital
@t0digital 3 роки тому
Рад, что полезно!
@ruslan577
@ruslan577 2 роки тому
Сегодня закончил проходить один неплохой курс по Django, чтобы реализовать свой петпроджект. Сел за "чистый лист" и понял, что понятия не имею, как правильно организовать архитектуру приложения с учетом обработки бизнес-логики. Почему-то этот вопрос в курсе обойден стороной (а точнее там все зафигачили во вьюху). Посмотрел твое видео - и в голове все встало на свои места. Большое спасибо, очень ценно!
@normaneye5187
@normaneye5187 2 роки тому
Что за курс закончил? Поделись названием
@user-yo1gf7ks1g
@user-yo1gf7ks1g Рік тому
@@normaneye5187 Гоша Дударь
@apostol_fet
@apostol_fet Рік тому
Обычно вроде как в модели все советуют выносить, но ао вьюху, это конечно прикол
@data19101988
@data19101988 9 місяців тому
Тоже курсы прохожу, уже пошла рефакторить😂
@bizdinvideo
@bizdinvideo 9 місяців тому
смотри в сторону паттернов. Типа Репозитории Dry.... Когда нужно использовать и когда не нужно. Паттерны написаны кровью и пОтом разрабов, рекомендую. После изучения паттернов поймешь что джанго это то еще говно с коробки.
@cherryass99
@cherryass99 3 роки тому
Колокольчик уведомлений от этого канала никогда не огорчал. Спасибо за очень полезную информацию!
@justjohn9832
@justjohn9832 3 роки тому
Пожалуй, ты прав, поставлю-ка колокольчик
@sidorovich21101986
@sidorovich21101986 3 роки тому
В PyCharm используй Shift+F6 для переименования функций и классов. Иначе при частых переименованиях очень легко поломать код в каком-то месте, просто, потому что забыл там переименовать (и даже об этом знать не будешь). А заодно расскажи про это новичкам. Это будет очень полезный для них совет.
@bogdanvolodko1119
@bogdanvolodko1119 3 роки тому
Каеф. Если будет не сложно, хотелось бы увидеть каноничный REST API на Django rest framework. Спасибо :3
@t0digital
@t0digital 3 роки тому
Спасибо! Возможно запилю:)
@olegmlavets5216
@olegmlavets5216 3 роки тому
Тоже очень интересно
@ultixn
@ultixn 3 роки тому
Во во точняк!!!
@MrDnovik
@MrDnovik 3 роки тому
@@t0digital тоже бы посмотрел
@serhiyprots8586
@serhiyprots8586 3 роки тому
Было бы очень интересно
@DmytroFrame
@DmytroFrame 3 роки тому
Код на 4К телевизоре шикарен! Спасибо что выпускаешь видео в 4К.
@happypanda1995
@happypanda1995 3 роки тому
Спасибо большое! Наконец-то дождались :)
@olegssh6452
@olegssh6452 3 роки тому
Круто что есть профессиональные разработчики, передающие свой многолетний опыт в такой понятной форме!
@anatolys9203
@anatolys9203 3 роки тому
Супер! Ну как всегда собственно))) спасибо большое за твой труд!
@Kirill-rg8vj
@Kirill-rg8vj 3 роки тому
Вот это реально сейчас пригодилось , ибо начал переписывать старый проект и после просмотра понял , что допустил кучу ошибок даже в новой версии, спасибо , очень помогло
@iamlobstarr
@iamlobstarr 3 роки тому
Супер! Спасибо огромное. Прошёл курс по джанге, где всю логику делали во вьюхах, спрашивал препода, как улучшить код, он отвечал, что долгая история, пока не доросли. Тут же за час времени все как по полочкам разложено. 👍🏻
@digital_ninja
@digital_ninja 3 роки тому
Спасибо огромное. Новые проекты делаю с файлом services в app'ах.
@misterX389
@misterX389 3 роки тому
Офигенный мастер-класс. Спасибо.
@tsarevnalagushka
@tsarevnalagushka 3 роки тому
Очень приятно посмотреть, как прямые руки код пишут. И, надеюсь, полезно
@t0digital
@t0digital 3 роки тому
Спасибо! Тоже хочется верить, что полезно:)
@vladislavmikhailov
@vladislavmikhailov 2 роки тому
Круто! Очень полезно, прям больше понимания стало! Хоть только начинаю Django мучить, но теперь есть понимание как реализовывать проекты!
@div3975
@div3975 3 роки тому
Отлично! Помогло разрешить ряд вопросов, которые бродили в голове.
@tandinio
@tandinio 3 роки тому
Спасибо вам огромное за полезные ролики. Недавно начал вас смотреть(являюсь junior full-stack developer-ом). Написал свой интернет-магазин, но после просмотра последних 2х видео про бизнес-логику, осознал, насколько неправильно подошел к данному вопросу(тупо копировал код из одной вьюшки в другую). Открываете глаза на программирование в целом. Спасибо огромное! C нетерпением жду выпуска следующих видосов:)
@MrOnlineCoder
@MrOnlineCoder 3 роки тому
Видео отличное, из серии "ответы на вопросы, которые вы боялись спросить")) Но буду рад услышать совет - я, к сожалению, не питонист, а node.jsник, но принципы там очень схожи. Так вот: 1) У тебя бизнес логика для рассылок жестко привязана к mailchimp. А что если завтра прийдеться перейти на другой сервис рассылок? Везде рефакторить импорт и названия? Хоть я и не верю что наступит это "завтра", но в общем случае рекомендуют создавать интерфейс по типу IEmailService, и чтобы mailchimp сервис реализовывал его. Вопрос: что с этим делать, и как вы реализовываете это в питоне? 2) Могут ли сервисы импортировать другие сервисы? Ответ скорее всего да, но как в таком случае тестировать отдельные сервисы? Обычно применяют dependency injection, но можно ли без него обойтись? Заранее спасибо.
@inspayran2049
@inspayran2049 Рік тому
Благодарю за видео) узнал много полезного) Да и подача хорошая, не было скучно слушать часовой ролик)
@fedyasam1700
@fedyasam1700 3 роки тому
Супер. Обожаю ваши труды)) респект
@life8261
@life8261 Рік тому
Отличное видео. Очень жалею, что не посмотрел его раньше, потому что мне пришлось до концепции отделения бизнес-логики доходить самому очень кровавым и долгим путем. А тут бац: и всё готовое, пользуйся на здоровье. Спасибо вам огромное за ваш труд! Однозначно лайк :).
@cronosnoname4038
@cronosnoname4038 3 роки тому
Лёха - это просто бомба, спасибо тебе большое ! Формат огонь, кратко\четко\все понятно и по делу, требую продолжения )
@t0digital
@t0digital 3 роки тому
Спасибооо!
@romangredis3722
@romangredis3722 2 роки тому
Сразу видно, пользователя Виндоус)
@user-je6dz7vz4y
@user-je6dz7vz4y Рік тому
Сколько полезной информации на вашем канале я получил не сосчитать, а сколько еще осталось). Спасибо за труд, все стало на свои места после вашего наглядного примера. Всех благ!🔥
@t0digital
@t0digital Рік тому
Отлично, рад, что полезно!
@nikitabalaganskiy6257
@nikitabalaganskiy6257 3 роки тому
Огромное спасибо за контент!
@brokenleg6122
@brokenleg6122 3 роки тому
Мне, как новичку в Django и вебе вообще, это видео просто чертовски полезно. Спасибо вам большое и удачи в развитии канала
@t0digital
@t0digital 3 роки тому
Отлично, рад, что полезно!
@MadMike93
@MadMike93 3 роки тому
Правильно нарвался на видос)) не будешь совершать наших новичковских ошибок)) Вот сейчас решил глянуть на свой старый проект, а там одна вьюшка на 285 строк кода, другая на 176))) не надо так))
@VideosfromMariupol
@VideosfromMariupol 8 місяців тому
Как успехи за 3 года? Устроился?
@kannykl7575
@kannykl7575 3 роки тому
Контент просто золото, спасибо за ваш труд!Верю, что справедливость восторжествует, и этот канал станет миллиоником!
@t0digital
@t0digital 3 роки тому
Идём к этому:) Спасибо!
@MrDnovik
@MrDnovik 3 роки тому
Спасибо большое, очень полезное видео.
@user-lz3ez3nn4j
@user-lz3ez3nn4j 3 роки тому
Спасибо большое, очень полезное видео
@user-ep3lx6xn8x
@user-ep3lx6xn8x 3 роки тому
Помню в одних из первых видео у вас дублировалось на экран все символы которые вы печатали, для меня это было очень полезно так как я стараюсь полноценно научиться пользоваться vim'ом. Было бы очень круто если бы во всех видео с практикой было такое отображение.
@justborney
@justborney Рік тому
Алексей, спасибо! Это как раз то, что мне было нужно
@serhio2441
@serhio2441 3 роки тому
Отличный выпуск! Как впрочем и всегда) Очень правильный подход показать как сделать плохо и поэтапно указать на ошибки и способы их исправить, соответственно и рефакторинг кода. Ещё раз подчеркивает важность не торопиться и не забивать так же на проектирование и продумывание логики, а не кидаться сразу в код и что-то писать... В общем, выпуск супер!
@user-qp7uv2ip7x
@user-qp7uv2ip7x Рік тому
Спасибо, интересно и познавательно!
@Ayhancikkkk
@Ayhancikkkk 10 днів тому
Здравствуйте, спасибо большое за видео ролик, вы очень хорошо объяснили как правильно делать и мне как новичок в Back-end разработке очень было понятно и полезно, ещё раз спасибо 🙏
@vladimirezh
@vladimirezh 3 роки тому
Приятно смотреть на человека, который понимает что он делает и хорошо владеет инструментом(языком программирования). Пишу на .net, но код читался, как песня.
@exemplles
@exemplles Рік тому
Самое полезное видео по Джанге. Thx
@timur8216
@timur8216 3 роки тому
Красавчик! Больше таких видео!
@t0digital
@t0digital 3 роки тому
Будет еще много хороших видео:)!
@pixel7139
@pixel7139 3 роки тому
а будет тематика о тестировании? интересно было бы послушать, unittest, pytest, best practice всяких теорий полно, а практики совсем мало, особенно что касаемо Джанго API
@t0digital
@t0digital 3 роки тому
Думаю, о тестировании будет материал, да!
@MadMike93
@MadMike93 3 роки тому
Поддерживаю. Я тоже вкурить не могу пока как тесты писать.
@nikkie_cold
@nikkie_cold 5 місяців тому
Ну так будет или нет? =)
@gaminggamer6860gaming
@gaminggamer6860gaming 3 роки тому
Спасибо за видос! Было бы круто увидеть видео в таком же формате по обработке исключений и логгингу
@t0digital
@t0digital 3 роки тому
Сегодня будет видео про переменные окружения, и скоро будет и по исключениям, логированию.
@user-uf1uf5vc3f
@user-uf1uf5vc3f 2 роки тому
Спасибо за урок сансей) пойду заварю чай и отрефакторю свой код полностью)
@juzzie818
@juzzie818 3 роки тому
спасибо огромное за все, что делаешь и за этот мастер-класс в частности)
@vkh5864
@vkh5864 3 роки тому
Премного благодарен!
@govdamikhaylo4183
@govdamikhaylo4183 3 роки тому
Вот видос который меняет взгляд на жизнь:)
@gustaugutter9477
@gustaugutter9477 3 роки тому
Офигеть, ты все таки его сделал)) Спасибо большое, гляну обязательно) Лайк не глядя)
@t0digital
@t0digital 3 роки тому
Юхууу, спасибо!
@GROGA65
@GROGA65 3 роки тому
Долгожданное видео ))))
@t0digital
@t0digital 3 роки тому
Йееее!
@anuwaygamechannel3225
@anuwaygamechannel3225 2 місяці тому
Как сказал один известный человек. Круто да этож круто. Получил для себя новый глоток для размышлений над улучшением своего проекта)
@dima_ivanov_ca
@dima_ivanov_ca 3 роки тому
Алексей, просто СПАСИБО тебе! Лучший канал по питону.
@t0digital
@t0digital 3 роки тому
Спасибооо!
@SergeyMenshov
@SergeyMenshov 2 роки тому
Большое спасибо вам, за науку! 👍 Сегодня не поленился и применил такую же логику на одном своем проекте на Lumen (PHP), реально стало гораздо удобнее. Теперь смотрю на очищенный от бизнес логики контролер и аж глаза радуются. 😀
@t0digital
@t0digital 2 роки тому
Отлично! Всё правильно, применимо на любой технологии:)
@microsoft8792
@microsoft8792 Рік тому
Отличное объяснение!
@t0digital
@t0digital Рік тому
Спасибо!
@scadeline805
@scadeline805 3 роки тому
Отличный ролик и отличный канал! Респект. Работаю бэкендером на Django, и ваши ролики помогают развиваться. Спасибо
@t0digital
@t0digital 3 роки тому
Спасибо! Рад, что полезно
@swimmwatch
@swimmwatch 3 роки тому
Спасибо за видос. Хотелось бы ещё видос по DRF. Очень классно наблюдать за тем, как пишет профи. У меня вопрос: мы очень часто создаём mailchimp client. Можно ли его как-то вынести в singleton? Чтобы у нас был один экземпляр клиента.
@dmytrokorbanytskyi1586
@dmytrokorbanytskyi1586 3 роки тому
Спасибо за видео, было интересно. Можете пожалуйста показать архитектуру приложения, где также есть ClassBasedViews: они несколько нарушают принципы данного подхода, интересно увидеть, как это можно красиво сочетать.
@vlaih0
@vlaih0 3 роки тому
Очень классное видео!
@t0digital
@t0digital 3 роки тому
Спасибооо!
@vitaliyboychenko6882
@vitaliyboychenko6882 3 роки тому
Лучший контент по пайтону на ру ютубе, лайк!
@t0digital
@t0digital 3 роки тому
Спасибо!
@AlexGott
@AlexGott 3 роки тому
Урааааааааааа!!!!!
@user-yb3cq8fg9i
@user-yb3cq8fg9i 3 роки тому
Приветствую! Для начала хотел поблагодарить за контент и выразить свою признательность за тот вклад, который Алексей делает в сфере популяризации и развития индустрии. Мне одному кажется, что в последнее время очень много внимания уделяется комментированию и именованию переменных, совсем позабыв о значимости методик моделирования и интерпретации кода как такового. Нет, я не говорю, что комментировать код не нужно, - нужно!!! и причем обязательно. В последнее время, лично у меня, сложилось ощущение, что все аля тимЛиды и сеньёры сговорились, пытаясь навязать мнимые ценности джунам, маскируя облегчение собственноручного код ревью, под «Паттерны комментирования». А теперь внесу свои пару капель дегтя в бочку меда: 1. GET запросами оформлять почтовые подписки? Серьезно? 2. По сути задачи 2 представления можно было бы отменить в 1, тем самым, применение DRY выглядело бы поубедительнее. Выделяя case_id = None(общие подписки) мы можем ограничиться одной моделью и одним представлением, тем самым «развязывая себе руки» для более высокоуровневого манипулирования сущностями. 3. Django.forms на мой взгляд решает все те проблемы, которые были размазаны между views.py(валидация) и services.py(логика) … Хотя тут уже больше вопрос вкусовщины… 4. CBV… Всегда стараюсь отдать предпочтения именно им, только если не стоит вопрос производительности. Но на таких задачах только они. Как отработает представление, если запрос будет POST,PUT? Что будет, если для каждой передаваемой переменной нужно удалить пробелы? Ну и тд…. 5. Settings.py Ну если мы бьемся за минимизацию количества строк в файле, то мб переменные mailcamp вынести в отдельный файл(аля mailcamp_settings.py), а в settings.py сделать импорт? 6. Настоятельно не рекомендую делать запросы к сторонним сервисам в рамках синхронного запроса. Это вешает сервис….причем как правило каскад сервисов… Но это уже другая история.. Алексей еще раз благодарю за контент!! Делать познавательные видео, гораздо полезнее и познавательнее, чем писать критикующие каменты!
@t0digital
@t0digital 3 роки тому
Спасибо за развернутый комментарий! > GET запросами оформлять почтовые подписки? Серьезно? Вьюшка из видео обработает и POST запрос, но мейл в данном случае передан в GET параметре, да. Я не считаю, что жёсткое следование REST в этом конкретном примере столь важно. > По сути задачи 2 представления можно было бы отменить в 1 Можно, но я не сказал бы, что две эти задачи настолько схожи, что имеет смысл объединить их в одну вьюшку. Подписки на разные сущности вполне подвержены потенциально разной логике обработки (как минимум будет проверка наличия Case, в будущем может появиться еще что-то, например, проверка авторов, относящихся к Case, и навешивание отдельных тегов в Mailchimp подписывающемуся). Если у нас 2 вьюшки - разный код будет в разных вьюшках, если у нас 1 вюьшка - то в ней неминуемо будут появляться куча if ветвлений, что усложнит логику, усложнит чтение и поддержку кода. Помимо DRY есть еще KISS:) Возможно я бы сделал CBV с наследованием, но опять же не уверен, что это здесь оправдано. > Django.forms на мой взгляд решает все те проблемы Я не считаю правильным использовать формы для чего-то, выходящего за рамки работы с формами. > CBV… Всегда стараюсь отдать предпочтения именно им Нормально, почему нет. Я тоже люблю CBV, как раз туда проверку исключений добавить в базовый класс и тд. > settings.py Можно, но выносить несколько строк кода в отдельный файл не уверен, что оправдано. Если конфигов прям много-много, тогда да. Но на практике такого не видел, чтобы конфигов в одном settings.py было столь много, чтобы это перестало быть комфортным. > Настоятельно не рекомендую делать запросы к сторонним сервисам в рамках синхронного запроса Да, конечно, тем более в синхронной джанге. Но это действительно другая история, не про БЛ. Спасибо:)!
@user-yb3cq8fg9i
@user-yb3cq8fg9i 3 роки тому
Диджитализируй! Спасибо за ответ!) Я не придерживаюсь позиции rest, тут какбы позиция реализации http: если основной результат выполнения запроса запись в хранилище, то post исправление put и тд. Эти рекомендации были задолго до появления rest. «Нет ничего более постоянного, чем временное» и «проект нельзя закончить, это как ремонт в своей квартире: можно только остановить»
@tsarevnalagushka
@tsarevnalagushka 3 роки тому
Было бы интересно посмотреть review какого-нибудь opensource проекта на django
@t0digital
@t0digital 3 роки тому
Интересная идея, спасибо!
@tilekasankulov5034
@tilekasankulov5034 3 роки тому
Шикарный видос. Подача очень крутая! Может сделаете серия мастер классов по django?)
@t0digital
@t0digital 3 роки тому
Спасибо! Может быть сделаю
@oleksandermrychko5767
@oleksandermrychko5767 3 роки тому
Спасибо что делитесь опытом. Я подумал возможно Вам будет интересно осветить тему контроллеров-классов и контроллеров-функций. А именно в каких ситуациях одно эффективней другого либо наоборот. Спасибо.
@t0digital
@t0digital 3 роки тому
Классы удобны для переиспользования какой-то контроллерной логики, для всех остальных случаев обычно хватает контроллеров-функций
@maksim4334
@maksim4334 3 роки тому
Да. Пожалуй нужно подписаться и поставить лайк. А ведь он говорил вам, не используйте time.time, еще тогда надо было задуматься.
@StoGigovo
@StoGigovo 3 роки тому
Отличное видео, просмотрел все. Вынес много интересного.
@t0digital
@t0digital 3 роки тому
Рад, что полезно!
@StoGigovo
@StoGigovo 3 роки тому
@@t0digital Сразу пошел смотреть на свои проекты, и как истинный Джун, я там налажал, все как в видео ) Исправлять начал, такая красота стала а!) Даешь больше видео по Питону!)
@rinatyagafarov5328
@rinatyagafarov5328 6 місяців тому
Третий или четвертый раз смотрю это видео. И только сейчас словил инсайт про хранение паролей в переменных окружения. Это же очень удобно, и не нужно париться, что конфиг с паролями улетит в репозиторий. Прям душевно благодарю за видео 🔥🔥🔥🔥🔥
@t0digital
@t0digital 6 місяців тому
Отлично:)!
@egorkomarov4719
@egorkomarov4719 3 роки тому
Мне понравилось - очень полезная информация
@t0digital
@t0digital 3 роки тому
Спасибо!
@i8enn
@i8enn 3 роки тому
Отличный выпуск! Хорошо все рассказал и показал - красавчик! Получился неплохой пример написания кода. Причем есть даже такая практика - сначала пишем как попало (если не можем определиться с архитектурой и структурой на "берегу"), а потом рефакторим, чтобы не делать "равиолли-код" и избежать "оверинженеринга" (правда, это скорее для новичков - у опытных разработчиков почти все получается сразу). P.S.: Но опыт не пропьешь - написать вьюшку начинающего junior-а не получилось (всеравно чувствуются хорошие привычки) ;). Я обычно не пишу комментарии, а сейчас отвлекся и вместо того, чтобы дописать сообщение к коммиту - пишу комментарий ;) Ещё правда есть пару вопросов, не обессуть ;) Disclaimer: цель данного комментария узнать мнения автора видео. Он не имеет задачи задеть чьи-либо религиозные чувства (в том числе в нейминге) и породить священную войну в ответах под собой. Автор комментария так же не является "троллем" и просто хочет узнать мнения автора видео. 1. Почему services, а не logic? Я понимаю, вкусовщина, но просто интересно твое мнение. У меня при виде services сразу в мыслях, что там код какого-то сервиса, а не бизнес-логика пакета. Хотя я бы положил работу с клиентом mailchamp (mailchamps_services) куда-нибудь в utils. Причем, можно даже на уровне проекта, а не приложения - так оно будет доступно для всех пакетов, если понадобится. Уж очень это похоже на шорткаты. Хотя кто-то говорит, что utils - это зло, потому что мы складываем туда все, что неможем отнести к какому-то модулю. Логику самого приложения (services.py у тебя) я бы закинул в logic.py (но тут просто различие в названии). Вообще правильный нейминг это холиварная тема (правда тут у каждого своя - главное, чтобы было понятно), поэтому можешь не отвечать ;). P.S.: Зря, зря я написал этот вопрос, но дюже интересно узнать твое мнение. 2. Как ты относишься к логике в django-rest-framework (DRF) фильтрах и сериализерах если речь идет не о логике сериализации/фильтрации? Ну самое элементарное это методы create/update в сериализерах DRF, вместо вызова функций логики сохранения (простой или сложной) непосредственно во view функции? P.P.S.: Жирноватый комментарий получился, спасибо всем кто дочитал до конца и прошу прощения за потраченное время и ресур вашего зрения ;). Ещё раз повторюсь, что нехочу никого обидеть (особенно автора видео) и если так получилось, то за это тоже прошу прощения. Так же прошу прощения за переход с автором видео на "ты" без его разрешения. Но проще просить прощения, чем разрешения (Zen Python) - так что можно бросить в меня Exception ;) И ещё раз хочу сказать спасибо за видео и за канал в целом. Для новичков (да и не только) это очень полезный формат, потому что увидеть как опытные разработчики программируют и мыслят мало где можно. Есть, конечно github, но в хороших проектах с хорошим кодом новичку будет трудно разбираться и понимать мотивацию, а здесь все доступно, понятно и с комментариями (как говорится то, чему не учат в школе и даже в университете ;)). Ещё раз спасибо - продолжай в том же духе, ты делаешь полезное дело!
@trytoStopTV
@trytoStopTV 3 роки тому
Это что за такое осмысление Python Zen про "просить прощение"? :D Поделитесь источником, будьте добры.
@i8enn
@i8enn 3 роки тому
@@trytoStopTV Здравствуйте! Вы задали очень интересный вопрос, и чтобы на него ответить я ещё раз открыл PEP 20 в поисках "Easier to ask for forgiveness than permission" и.... не нашел. Для меня это было странно, я так привык к этому принципу, который для меня казался не отделимым от Python, что начал пытаться вспомнить, где я его видел. Через пару минут до меня дошло, когда я нашел его упоминание в "глоссарии" python - это принцип EAFP. Рука - лицо. Стыдно. Но теперь выпавшее звено встало на свое место. А Вам хочу сказать спасибо - теперь не буду ссылаться на Zen упоминая эту фразу (конечно, если опять не забуду, что это перевод расшифровки EAFP принципа...).
@victortamanov
@victortamanov 3 роки тому
Огромное Спасибо!!! Теперь понятно, как рефакторить длинный код! Можно ли по возможности рассказать о том, как писать по TDD принципу? И как рефакторить имеющийся код по TDD, если такой подход для этого вообще применим? Если применить TDD к этому примеру после того, как написан "новичковый" код, пришлось бы переписывать кучу тестов. Или пришлось бы "гонять" структуру кода в голове до тех пор, пока не сформируется первый правильный тест. А как делать по best practice?
@turtlechevalry
@turtlechevalry 3 роки тому
Я интуитивно пришёл к тому же, только осмыслить был не в состоянии. Казалось, что я просто отсебятину делаю и просто плохо усвоил джангу. А оказалось, все правильно. Респект. Все понятно. Термин services возьму на вооружение
@Bandera_tut
@Bandera_tut 3 роки тому
Круто, также делал в фласке, думал что сильно умно. Замути еще, пожалуйста, про переменные окружения, правильную настройку файла settings.py перед первым коммитом.
@MadMike93
@MadMike93 3 роки тому
Поддерживаю)) и ещё бы хотелось услышать про альтернативы переменным окружения в виде Ansible, или Zookeper))
@justjohn9832
@justjohn9832 3 роки тому
Вот это как раз мега-полезный выпуск, очень в тему к тому, что я сейчас делаю
@t0digital
@t0digital 3 роки тому
Отлично, рад, что полезно
@arkadyaeternit9793
@arkadyaeternit9793 3 роки тому
Отличный выпуск, как всегда огромное Спасибо! Было бы неплохо еще посмотреть про логирование, как неотъемлемое составляющее проекта в продакшн.
@t0digital
@t0digital 3 роки тому
Будет такое видео
@arkadyaeternit9793
@arkadyaeternit9793 3 роки тому
@@t0digital Очень хорошо, буду ждать!
@yakoro4ka112
@yakoro4ka112 3 роки тому
Полезность канала растет на глазах! Живой кодинг - это маст хэв)
@t0digital
@t0digital 3 роки тому
Йеее:) Спасибо!
@Im_Seth
@Im_Seth 2 місяці тому
Здравствуйте, расскажите пожалуйста про вашу настройку ide (понравилась подсветка django файлов в левом сайдбаре)
@dmitrytsmyh5971
@dmitrytsmyh5971 3 роки тому
Полезное видео! Одно замечание: выносить код, связанный с БД в отдельный файл есть ли хорошая идея? Каждая вьюшка, класс или функция, связана с роутером. Она или дает инфу из БД, либо ее ложит туда. Придется ради одной-двух строк писать ненужные функции и засовывать их, куда не найдешь потом.
@exorciste2007
@exorciste2007 3 роки тому
Для функций которые прям ничего не возвращают есть клёвая штука в typing модуле - это NoReturn. Наверное её использование более логично в данном случае. Благодарю за видео, годный контент делаешь! Лайк
@daninspace9009
@daninspace9009 11 місяців тому
Это только для функций которые именно что не завершаются, например в которых бесконечный цикл. Если функция всё же нормально завершается и ничего не возвращает, то необходимо использовать None
@surelyy2400
@surelyy2400 3 роки тому
Отличное видео
@t0digital
@t0digital 3 роки тому
Спасибо!
@CooleR152
@CooleR152 3 роки тому
Алексей, курс какой-нить планируется у тебя? Проводишь ли индивидуальные занятия?
@m0rtym0rty7
@m0rtym0rty7 3 роки тому
только вот задавался вопросом о бизнес логике сегодня. Много перерыл, так и не понял, и вот ты, кайф. Мне везет)
@t0digital
@t0digital 3 роки тому
Отлично:)!
@tulseluper7051
@tulseluper7051 Рік тому
Спасибо за видео! К сожалению, именно в Джанго очень сильно плаваю. Но есть вопрос: Если в проекте несколько баз данных, то можно ли как-то класс Meta вынести из объемлющих классов и сделать общим для всех, например, с помощью декоратора @dataclasses ?
@alexeyshapka4080
@alexeyshapka4080 3 роки тому
Было бы круто ещё ссылочки на гитхаб репу!
@PythonDevelopment
@PythonDevelopment 3 роки тому
Привез лайкосиков, куда разгружать, командир? =)
@t0digital
@t0digital 3 роки тому
О, разгружаем здесь!
@ashm_tech
@ashm_tech 4 місяці тому
Здравствуйте, Алексей!) А не думали ли вы о выпуске обновления данного видео, с новыми технологиями, и тд
@user-gk1rn5lm6t
@user-gk1rn5lm6t 11 місяців тому
Спасибо большое за видос, было очень полезно. Не нашел у вас похожего видео про DRF. Его нет?
@t0digital
@t0digital 11 місяців тому
его нет
@Flint367
@Flint367 2 роки тому
В принципе ничего нового я тут увидеть не ожидал, но какое же черт возьми удовольствие приносит лицезрение распиливания лапши)
@gromovoy1987
@gromovoy1987 3 роки тому
Отлично! Можно и нужно всё-таки исследовать exceptions и что-то с ними делать. Не все всегда будет работать гладко думаю
@t0digital
@t0digital 3 роки тому
Да, по исключениям были недавно видео на канале, и по их обработке в middleware джанги
@gromovoy1987
@gromovoy1987 3 роки тому
@@t0digital Посмотрю, спасибо
@user-ms2hu5kk5z
@user-ms2hu5kk5z 3 роки тому
Спасибо за работу! Очень полезно, поделись ссылкой на гит с стартовым шаблоном django apps
@user-ms2hu5kk5z
@user-ms2hu5kk5z 3 роки тому
Охрана отмена, нашел) github.com/alexey-goloburdin/django-clean-template
@sporttyt
@sporttyt 2 роки тому
20 июл. 2020 г. сразу лайк
@sergeyretivykh7591
@sergeyretivykh7591 3 роки тому
Много по существу, интересно услышать комментарии на такие вопросы: 1. mailchimp_services.py со временем резонно переедет в /services/mailchimp.py, где рядом будут все другие внешние апи и интеграции. Не будет путаницы этих services и services внутри app? 2. Как по мне, название add_email_to_common_mailchimp_list не говорит о том, что будет идти запись каких-то данных в базу, помимо обращения к только mailchimp. 3. _get_mailchimp_service тут вызывается каждый раз дважды, почему бы не объявить глобально клиент в начале файла и юзать его готовый? 4. Запросы к базе и обработка результатов нормально уживаются внутри app/services.py или бывает необходимость разделить это в дальнейшем тоже на 2 отдельных слоя?
@t0digital
@t0digital 3 роки тому
1. Либо services.py, либо папка=пакет /services/ с файлами=модулями внутри. В целом не проблема обычно начать с services.py модуля и заменить его впоследствии на пакет с несколькими модулями. 2. Согласен, это не очень хорошо. Есть поведение, которое по названию функции не подразумевается. Надо переименовать и/или побить функцию на несколько (уже не помню детали по видео) 3. Глобально в начале файла я бы это не создавал, в целом можно обернуть это всё в класс и создавать в нём один экземпляр или синглтон сделать, или просто в _get_mailchimp_service реализовать кеширование созданного экземпляра. Есть куда улучшать, всего в одном видео не показать, да и улучшение процесс в общем бесконечный, если есть время на него 4. Думаю, что зависит от задачи. Что-то простое уживётся, что-то сложное точно надо будет побить на 2 или больше слоев в зависимости уже от бизнес-логики. Мыслите верно:)
@donfedor007
@donfedor007 Рік тому
В классах используются миксины для создания данных в бд из форм например, это помути обработку бизнес логики мы делегируем классу миксину?
@serhii-666
@serhii-666 3 роки тому
Как насчет устранения жестких зависимостей от баз данных и самого Джанго? В стиле Чистой архитектуры. Вот это было бы интересно.
@dolshevsk
@dolshevsk 3 роки тому
Классный видос, спасибо. А не подскажешь, как ты так между табами pycharm(.py файлами) с помощью клавиатуры перемещаешься?
@t0digital
@t0digital 3 роки тому
На маке CMD+{ для перемещения влево, CMD+} для перемещения вправо (аналогичные работают в Google Chrome и скорее всего других браузеров), на винде скорее всего вместо CMD будет CTRL. Для IdeaVim плагина еще gt и gT.
@artemvasilevich5109
@artemvasilevich5109 Рік тому
Большое спасибо за видео! А не нарушает ли совместное использование приложениями одной и той же бизнес-логики принцип их отчуждаемости? То есть, если я захочу использовать это же приложение в другом Django-проекте и скопирую его, то ведь полетят все импорты в это приложение бизнес-логики из других приложений, которые были в старом проекте. Придется лазить искать и копировать их все в новый проект.
@wordpreslabs
@wordpreslabs 3 роки тому
Как насчёт ролика по лайфхакам конфигурации django, переменные окружения, контейнеры, алиасы) ну как ты любишь)
@slenchannel1947
@slenchannel1947 3 роки тому
Отлично рассказываешь! Кратко, ясно и по делу. Не планируешь ли серию уроков по Django?
@t0digital
@t0digital 3 роки тому
Я пишу сейчас большой курс по веб-разработке на Python, он будет
@slenchannel1947
@slenchannel1947 3 роки тому
@@t0digital Балдеееж. Аж настроение поднялось хы
@fakefakekovich4257
@fakefakekovich4257 3 роки тому
@@t0digital курс будет платным?
@icherniakov
@icherniakov 3 роки тому
Диджитализируй! Привет! А в нем будет DRF и какой-нить JS фреймворк?
@t0digital
@t0digital 3 роки тому
курс будет платным
@velomatica
@velomatica 3 роки тому
Ну здесь мои полномочия всё...Здесь питоний дух, Питоном пахнет )))
@t0digital
@t0digital 3 роки тому
Хахах:) Полномочия всё!
@shuramrm
@shuramrm 2 роки тому
Fantstic !
@darkside2436
@darkside2436 3 роки тому
Топ контент по джанго
@t0digital
@t0digital 3 роки тому
Спасибо!
@maksymhoncharenko163
@maksymhoncharenko163 3 роки тому
Спасибо за видосы, вы изменили мой стиль кода и мышление в лучшую сторону! Вопрос: что по поводу рефакторинга частей со словарями? как тут был словарь с name_audience: id_audience и мне например понадобилось изменить ключ COMMON на COMMON_AUD. Rope не умеет рефакторить внутри словарей, т.к ключ словаря это по сути обычный стринг. Pycharm не знаю, пишу в nvim + coc
@t0digital
@t0digital 3 роки тому
Для этого как раз и удобны питоновские Enum, о которых я упомянул в видео. Сделаю отдельный выпуск о них, пожалуй:)
@user-fr6sg2ru9t
@user-fr6sg2ru9t 3 роки тому
Отличное видео, как ты считаешь нормальная ли практика хранить бизнес логику в моделях?
@t0digital
@t0digital 3 роки тому
Я считаю, что нет, если речь о джанговых моделях. Лучше к ним относиться как к структуре данных, возможно используя какие-то несложные кастомные ObjectManagers, остальное лучше писать в отдельном слое.
@dimak4528
@dimak4528 3 роки тому
Все круто, полезно. Только как тестировать ф-ии, использующие mailchimp? Фейковую апи mailchimp подсовывать или как?
@sivr5vs38
@sivr5vs38 3 роки тому
Dima K4 тут только манкипатч поможет
@m0ntecr1st04
@m0ntecr1st04 3 роки тому
Моки
@user-kg5sg6rx6e
@user-kg5sg6rx6e 3 роки тому
Хорошее видео. Почему EAFP избегаете?
@user-um4pn7rk6y
@user-um4pn7rk6y 7 місяців тому
Вот где вим брал свое начало)
Архитектура ПО, MVC и бизнес-логика. Критика Django
20:26
Диджитализируй!
Переглядів 74 тис.
ФОКУС С ЧИПСАМИ (секрет)
00:44
Masomka
Переглядів 3,9 млн
Разбираем основы Kafka и RabbitMQ
26:54
Digital train | Alex Babin
Переглядів 6 тис.
Микросервисы - Простым Языком на Понятном Примере
19:08