видос топ наконец то нашел нормальное объяснение работы redis с джанго
@SeniorPomidorDeveloper6 ай бұрын
🔥спасибо
@Rulezzz311 ай бұрын
Отличные видео. Спасибо автору, продолжай снимать. Хейтеры всегда будут, и не снимут свои видео лучше вашего. Очень нравится такая подача материала
@SeniorPomidorDeveloper11 ай бұрын
Спасибо!
@dimuha82 Жыл бұрын
Огромное спасибо за курс! Освещено много нюансов про которых даже в платных курсах нет инфы.
@akimovvadim473610 ай бұрын
Хорошие видосы у тебя. Я на четвертной Джанге пробую это все делать, пока не встретил больших проблем из-за различия версий.
@SeniorPomidorDeveloper10 ай бұрын
Супер. Это полезная инфа . Спасибо
@МурадАхмедов-ч1с Жыл бұрын
Ты просто гигант, Celery примеры просто бомба, особенно всякие побочные проблемы
@TaimanSaidaliev5 ай бұрын
Сеньор Помидорович Разработчик вы лучший!
@SeniorPomidorDeveloper5 ай бұрын
Спасибо!
@shaxdjuraev55853 ай бұрын
Здравствуйте! я не хочу находить недостатки в коде, так как тут импровизация, но у вас такая проблема получилось, когда вы добавили новую запись с суммой 77, он добавился два раза в тотал прайс 459 + 154 = 613. объясняете замечательно, удачи в вашей работе.
@SeniorPomidorDeveloper3 ай бұрын
Здравствуйте! Еще бы вспомнить что там было) Ну да, тоже делаю ошибки , бывает. Спасибо за комментарий!
@shaxzodnizamov9773 Жыл бұрын
Можно ещё delete метод модели Subscription переопределить и не юзать сигналы)
@SeniorPomidorDeveloper Жыл бұрын
точно!
@Chel1k7 Жыл бұрын
При такой реализации метода, при изменении тарифного плана в уже созданном объекте не будет меняться цена def save(self, *args, **kwargs): creating = not bool(self.id) result = super().save(*args, **kwargs) if creating: set_price.delay(self.id) return result
@BELLA_VESTA5 ай бұрын
Отличный курс!!!
@МурадАхмедов-ч1с Жыл бұрын
receiver можно не коннектить так в ручную, а сделать автоматически, так же можно повесить на ресивер post_save, в нем проверять создался объект или нет и там уже запускать тачку. Там будет почище, чем в модели на save вешать
@BorisenkoV89 Жыл бұрын
Лайк не глядя 😎
@vadimnikadon7332 Жыл бұрын
Супер!!! Огромное спасибо
@shaxzodnizamov9773 Жыл бұрын
Момент с определением Subscription был создан или изменен не очень нравится, так как могут вызвать save передав id Subscription(id=1, ...). Я на одном из проектом натыкался на такое. Либо self._state.adding is True нужно использовать, либо сигналы )
@SeniorPomidorDeveloper Жыл бұрын
Очень плохая практика передавать id в не созданный объект. Надо делать так, как это делают , разрабатывая на Джанго. Я могу еще 10 способов придумать, «как делать не надо и все сломать». А зачем?
@jamjam33379 ай бұрын
спасибо!
@timofey-03076 ай бұрын
Привет! Вот вы сказали, что не большой любитель django сигналов, но почему? Они чем-то плохие, или вам просто не нравится? Это я спросил, чтобы понимать, стоит ли их использовать в дальнейшей разработке или лучше найти другой метод.
@SeniorPomidorDeveloper6 ай бұрын
По тому что они не очевидные. Вот я сохранил модель , и где-то какие-то сигналы запустились. Если проект большой то увидеть это в когде не всегда просто. Их надо по коду искать, и более того, о них надо всегда помнить. Если я напишу код в методе save() то я всегда буду его видеть , я понимаю что он запуститься на сохранении модели. Но вот сигнал на delete штука полезная, его сложно чем-то заменить
@timofey-03076 ай бұрын
@@SeniorPomidorDeveloper спасибо за ответ и за курс!
@nikez600 Жыл бұрын
Спасибо большое за урок! Можете пояснить для меня, почему Вы предпочитаете не использовать сигналы в Django?
@SeniorPomidorDeveloper Жыл бұрын
Не вижу смысла. Точнее есть смысл там отлавливать удаление модели, но это редкий кейс. А по архитектуре, они работают неявно, (а явное лучше неявного) вызываются фреймворком где-то «под капотом», мы не видим в нашем коде когда и в каком количестве они вызываются . А если кода и их в коде много - это очень не удобно. Если просто вызывать тот же код из save() это хотя бы будет видно. А плюсов нет, они также работают синхронно, также нагружают систему, это просто архитектурное решение и по-моему не самое удачное
@nikez600 Жыл бұрын
@@SeniorPomidorDeveloper Еще они хорошо изолируют приложения и да, дебажить их неприятно. С Вашими аргументами согласен, лучше явное. В моем случае с сигналами приходилось комментировать в моделях на какие сигналы они завязаны
@begula_chan Жыл бұрын
Благодарю за еще одно прекрасное видео по интересной теме! У меня вопрос, почему вы не использовали django-debug-toolbar? С ним вроде намного удобнее контролировать SQL запросы
@SeniorPomidorDeveloper Жыл бұрын
С ним удобнее для веб страниц. Но если какие-то внутренние расчеты иди таски то он бесполезен
@ibrahimoglu Жыл бұрын
👍
@ETOVIDEOBLOG-c8u Жыл бұрын
Забавно что в предыдущих уроках ты писал о том, что не любишь сигналы, а тут используешь. В целом не нужно было пихать в +100500 сейвов очистку кэша, можно было бы это сделать в одном сигнале перечислив модели. @receiver(pre_save, sender=Model1) @receiver(pre_save, sender=Model2) @receiver(pre_save, sender=Model3) def reset_cache(sender, instance, **kwargs): pass Также файлик никогда никто не называет recievers в любом проекте это файл signals. Настройку сигналов делают в apps в функции ready() from django.apps import AppConfig class BillingConfig(AppConfig): name = 'project.test' def ready(self): from project.test import signals # NOQA Вообщем посмотрел 8 уроков, за такой код и такую оптимизацию меня бы уволили) Отписка не глядя!
@SeniorPomidorDeveloper Жыл бұрын
Не глядя уже не получится)
@dodokwak Жыл бұрын
Все будут только рады, если вы покажите лучше вариант.
@ЮрийКлименко-к3щ Жыл бұрын
Почему pre_save а не post_save? Вдруг сохранить модель не получится, потеряем кэш просто так.
@SeniorPomidorDeveloper Жыл бұрын
Ничего нет плохого в том чтобы потерять кеш просто так.
@SeniorPomidorDeveloper Жыл бұрын
Post save пока отрабатывает может какое-то время выдаваться неактуальный кеш, а это хуже
@1978rembo Жыл бұрын
Здравствуйте. Не могу найти ваш профиль в GitHub.
@SeniorPomidorDeveloper Жыл бұрын
github.com/chepe4pi/service_app/tree/day-10
@pretcb Жыл бұрын
Привет! Спасибо за этот урок, как раз хотел на практике пощупать cache! Очень все по делу. В методе save модели Subscription, если мы не создаем модель, а изменяем план или сервис, стоимость подписки price тоже должна пересчитываться как и total_amount, по-этому creating можно не проверять!? об этом уже писали в предыдущих комментах к урокам, но это мелочи:)
@SeniorPomidorDeveloper Жыл бұрын
Я бы как-раз не делал пересчет на любые изменения. Если мы уберем проверку creating, то при изменении полей, которые не влияют, тоже будет запускаться пересчет. По поводу изменений плана или сервиса. Я бы наверное запретил их изменять в принципе, на уровне приложения, а сделал бы только пересоздание подписки.Но я, почему-то этого не сделал. :)
@storlay9 ай бұрын
При попытке добавления нового сервиса на 16:36 ошибка 'Service' instance needs to have a primary key value before this relationship can be used. Проблема в переопределении метода save, не могу понять как решить её
@SeniorPomidorDeveloper9 ай бұрын
Не понятно. Тут надо лог целиком смотреть, в нем должно быть написано
@SeniorPomidorDeveloper9 ай бұрын
Я имею ввиду что надо смотреть трейсбек ошибки
@storlay9 ай бұрын
@@SeniorPomidorDeveloper курс бесценный я считаю, только благодаря нему смог разобраться в Celery, глубже вник в docker-compose, и узнал много нового об оптимизации Спасибо за курс) Тоже в БА кстати
@SeniorPomidorDeveloper9 ай бұрын
Спасибо за отзыв! БА - супер! Где живешь?
@storlay9 ай бұрын
@@SeniorPomidorDeveloper в Палермо, Las cañitas, рядом с ипподромом. А ты где остановился?
@Antinormanisto4 ай бұрын
А откуда адрес редиски брать? 2:25
@SeniorPomidorDeveloper4 ай бұрын
Хм. Он вроде у всех одинаковый
@Antinormanisto4 ай бұрын
@@SeniorPomidorDeveloper, благодарю
@Antinormanisto4 ай бұрын
@@SeniorPomidorDeveloper, у меня появился новый вопрос. Я не замечал чтобы в функциях ты закрывал соединение(к примеру redis_client.close()). Если мы прописали CACHES и используем cache, то этого делать не надо? Просто в ручную, прямиком с использование библиотеки redis, надо было подключаться(redis_client = redis.Redis(host=, port=)), а в конце, когда мы понаписали всё что хотели, надо redis_client.close()
@SeniorPomidorDeveloper4 ай бұрын
@Antinormanisto @Antinormanisto наверно. Я всегда через caches использую
@Ch1ck3nWTF Жыл бұрын
Получается, что сигналы - это по сути триггеры, но на уровне питона?
@SeniorPomidorDeveloper Жыл бұрын
Ну приблизительно.
@Ch1ck3nWTF Жыл бұрын
@@SeniorPomidorDeveloper Спасибо ответы и курс в целом, очень толковая инфа в море хеллоуворлд'ов)
@akashpmani11 ай бұрын
Hello Iam from india i didnt understand a word you said but i learned few things from this video thanks for that , can you share your github or source code of this
@SeniorPomidorDeveloper11 ай бұрын
Namaste! This is the source code github.com/chepe4pi/service_app I love India, I have visited your country 4 times. What state are you from?
@sayhellotoroy Жыл бұрын
охереть.. здесь и тут, такой импорт. Хорошо бы называть где это "здесь" и какой именно импорт продиктовать.