у меня, что бы заработала django-admin-panel, надо было установить django_extensions и в settings дописать: import mimetypes mimetypes.add_type("application/javascript", ".js", True)
Первый на кого я попал по урокам джанго. Сначала я подумал курс какой-то непонятный. В силу своих слабых знаний, я не мог понять всю силу этого курса, А теперь я понимаю, что это лучший курс по джанго , особенно по ресту. Спасибо за предоставленные знания
Самый лучший курс по django который я встречал как на русскоязычном ютубе, так и на англоязычном. Мало кто заморачивается и рассказывает про тестирование и оптимизацию SQL. Хотелось бы посмотреть еще более подробно про ORM, а также про работу с сокетами в django.
Сеньор Помидор Девелопер, снимаю перед тобой шляпу! Так подробно и доходчиво мало кто рассказывает. Жду новых интересных кейсов из реальной практики программирования.
И снова спасибо! Про дз для уменьшения полей можно убрать select_related и использовать django.db.models.F Для prefetch_related - django.db.models.Prefetch, в котором в queryset использовать метод only
Вот по другому не могу сказать про ваш труд, ищешь серебро, а находишь золото :) Помимо Джанго начал лучше работать с Докуминтацией, скачал тонну сторонник вспомогательных вещей и узнал много сервисов для работы с основной темой поиска . Спасибо!
ДЗ 1) Убираем select_related('owner) пишим внутри annotate: owner_name=F('owner__username') 2) Вместо prefetch_related('readers') пишим prefetch_related(Prefetch('readers', queryset=User.objects.all().only('first_name', 'last_name')) Запрос хорошо так сжимается в итоге
Вау. Про F('owner__username') догадался почти сразу, а вот про prefetch_related(Prefetch('readers', queryset=User.objects.all().only('first_name', 'last_name') вообще не знал. Ща буду изучать, спасибо ;)
Здравствуйте еще раз! Я за всю свою жизнь не писал столько комментариев, как вам под ваши видео. Еще раз хочу поблагодарить на прекрасный урок, ORM запрос получился вообще здоровый, но главное оптимизированный. Дз сделал, запрос получился еще более оптимизированее! Удачи вам в развитии!
Спасибо, такого нигде не видел. По ДЗ получилось убрать лишние поля через аннотате, правда средняя скорость не уменьшилась. Кстати наверняка здесь есть возможность посчитать среднюю скорость запросов и потом сравнить, при разных настройках. Кстати для ДЗ еще пришлось убрать из аннотате .select_related('owner'), иначе поля все равно выгружались все.
Тут не нужно оценивать скорость в тестах на локальной пустой базе . Когда много будет записей и под нагрузкой , будет совсем другая картина и оптимизация будет очень нужна. Тогда, будет видно по запросам что конкретно нужно будет оптимизировать . Тут всегда вопрос баланса , если база спроектирована гибко и удобно, то запросов больше, если база более плоская и меньше связей то запросов меньше. Но всё-таки лучше делать удобно и гибко , а потом оптимизировать , добавлять индексы и кеш.
Хотел посмотреть чисто этот урок, чтобы освежить память - по итогу пересмотрел весь курс У тебя есть бусти? патреон ? Может будешь делать какие-то платные курсы?
сеньёр, а можно ли вообще сделать select_related для поля с ForeignKey и без read_only? проще говоря у книги есть поля категория, которое связано с моделью CategoryModel если в сериализаторе указать category = serializers.CharField(source='category.id'), то в тесте update говорится что это поле либо должно быть read_only=True, либо не должно содержать .id если убрать .id , то говорится что нет смысла делать category = serializers.CharField(source='category) в итоге чтобы все работало дополнительный sql запрос для category остается если способы как это оптимизировать ?
тулбар активировался только после: 1. manage.py collectstatic 2. For Windows, you need to edit the registry. Set HKEY_CLASSES_ROOT\.js\Content Type to text/javascript.
Спасибо за урок! Очень интересно и ешё более полезно! Так что же это получается, annotate стоит использовать всегда, когда это только возможно? Задание норм =)
Насколько я понимаю, в DRF мы берем переменную queryset и в неё через аннотации передаем множество полей, которые хотим увидеть в конечном json формате? Т.е. тут нет такого, как в обычном Django, где мы, допустим, делаем квери запросы и передаем их в контекст под разными именами? Или в DRF это тоже имеет место быть, но нужно уже метод get_queryset писать?
Сори, может не очень понял вопрос. ORM одинокого работает в Django и DRF. Мы можем сами формировать response во вью , и тогда как-бы словарь , который мы формируем для response будет аналогично как контекст во вью с шаблоном . А можем это сделать в get_queryset если это Api View. Можно через сериализатор типа автоматически. Но в аннотации мы не определяем список полей , которые хотим увидеть в JSON. Мы там создаем только те поля, которых нет в базе и это скорее исключительный случай
сир помидор, спасибо за урок, он пришелся как раз вовремя. когда я задумался о том, почему дебагер ругается на скорость, пофиксил почти всё благодаря тебе. очень жду урок по правам и модерации, очень надеюсь, что он у тебя в планах. если нет, то, может, сделаешь какой-то экстра ролик? или дай что почитать, пока нагугливается только говно, а что-то ценное чрезвычайно медлено находится на stackoverflow. да и вообще все уроки в тырнетах, в отличие от твоих не имеют ничего общего с реальными проектами, которые окажутся в сети.
Хах. Спасибо! По правам уже есть один урок . По модерации пока нет. В принципе, я хотел рассказать о FSM на примере модерации, но не уверен что получится ближайшее время . Тема большая . А что конкретно хотелось узнать о правах и модерации ?
Доброго времени суток! Может, подскажете, я далеко не опытный разработчик, может подскажете или наведете на путь, вот проходил курсы в первый раз у вас очень давно, на работу устроиться получилось, но не совсем по джанго, но все равно ваши курсы помогли очень ) и вопрос такой встал, что все же хочу стать именно веб разработчиком, но задался вопросом, а может все таки не Джанго, а использовать другой язык и фреймворк. Понимаю, что это все инструменты и они достигают одни и те же цели примерно, но почему то часто сталкиваюсь с вакансиями по Java spring boot, php symphony и задумался, почему их так много и закралась мысль, что может и не в том направлении я изучил и изучаю веб, точнее, не с тем языком.. может у вас какие мысли есть на этот счёт ? Просто хотя бы рассуждения, может они мне помогут поставить все точки над и)
Добрый день! Рад что получилось найти работу, сейчас очень большая конкуренция среди Джуниоров . Сравните именно количество вакансий. По python я думаю что больше чем по Java или php. А по Django наверно больше чем по другим веб фреймворкам. Но если интересно что-то другое то это очень хорошо! Php изучать не советую , он уже очень устарел и его везде вытесняет python . Java все еще актуальный язык в интерпрайс сегменте (банки и тд) , большой бизнес , не стартапы. Сложность только в том что он очень сложный и потребуется много времени. Но если к питону вы знаете какой-то строгий ООП язык, это большой плюс в резюме . Советую обратить внимание на Go или он же Golang. Вот он сейчас очень в тренде и во многом обыгрывает питон в плане веба, намного быстрее и не такой сложный как Java. Многие компании в дополнение к сервисам на питоне пишут микосервисы на Go. Думаю за ним будущее , если он питон в вебе не вытеснит , то точно потеснит его неплохо
@@SeniorPomidorDeveloper да, спасибо огромное ! Как раз Golang по работе тоже требуется, изучаю и применяю его тоже, правда у него своеобразное ООП )) а так да, микросервисы прям хорошо заходит, после си как раз питон изучал , вот ваши курсы в том числе и Golang вот по работе тоже )
Спасибо за видео! Полдня потратил, но так и не удалось запустить последнюю версию django-debug-toolbar 3.2 , которую PyCharm ставит по умолчанию. А также 3.0 и 3.1. Пришлось откатится на 2.2 - все работает. Гугл говорит, что это не редкая проблема. (Django 3.1.5)
используй бибилиотеку rest-auth там готовая аутентификация из коробки по токенам и сессиям и jwt токенам также, на email приходит письмо с сcылкой когда юзер нажимает на ссылку на клиенте должен быть этот урл обрабатывается и слаться запрос на сервер с uuid, token которые нужно получит из урла
нашел решение нужно в urls.py в условие if settings.Debug добавить следующие строки: import mimetypes mimetypes.add_type("application/javascript", ".js", True)
здравствуйте сениор помидор,видео как всегда отличное,но у меня есть один error,который не знаю как исправить, после того,как скачал и установил debug-tooler, но после этого,когда я выхожу из админки и пробую опять логинитья приходит такое сообщение "302 Found Location: /admin/login/?next=/admin/ The Django Debug Toolbar has intercepted a redirect to the above URL for debug viewing purposes. You can click the above link to continue with the redirect as normal. " После этого,когда в django-swagger-е стал логиниться,сайт стал не понимать,что я логинюсь.Как все это настроить?
Не знаю, не встречал такую проблему . Если погуглить то видно что с ней кто-то сталкивался и кто-то предлагает разные решения . Переменная там есть какая-то связанная с этими редиректами . Со swagger я в курсе их не использовал , тоже не знаю какие вместе у них могут возникнуть проблемы ...
Вот что нашёл stackoverflow.com/questions/33545798/the-django-debug-tool-lead-to-an-redirect-loop-on-admin-site и github.com/jazzband/django-debug-toolbar/issues/996
Senior Pomidor Developer кстати,есть еще один вопрос,хотел-бы задать. Есть тестовое задание. Сайт,где при выборе фильма для просмотра генерируется ссылка,после чего,когда отправляете ссылку другу,вы можете смотреть фильм вдвоем и переписываться.Вы знаете как это создать через django rest framework или нет?
Рофлан в том что без этого крутого toolbara сайт грузится раз в 8 быстрее, и если что то и надо оптимизировать, то логику отслеживания тулбаром чего либо, ибо она некорректна
Немного не понял почему при тестировании мы создали имя фамилию пользователю но никак не прописали что все пользователи читают все книги и тест спокойно прошел. Или в шести строках "UserBookRelation.objects.create(user=user1, book=book_1, like=True, rate=5)" про это и указывается автоматически?
@@SeniorPomidorDeveloper спасибо за ответ! Всех благ тебе и процветания!!! Я уле писал но скажу ещё раз: это самые стоящие уроки в русскоязычном сегменте. Как идею для дополнения роликов было бы круто осветить возможности для ВСЕХ типов сериализаторов. Добра тебе!!!!
у меня, что бы заработала django-admin-panel, надо было установить django_extensions и в settings дописать:
import mimetypes
mimetypes.add_type("application/javascript", ".js", True)
Первый на кого я попал по урокам джанго. Сначала я подумал курс какой-то непонятный. В силу своих слабых знаний, я не мог понять всю силу этого курса,
А теперь я понимаю, что это лучший курс по джанго , особенно по ресту. Спасибо за предоставленные знания
Посмотрите новый !
Тоже самое, сначала не понимал вообще что к чему, и где выход на темплейты, для визуальной работы, сейчас тоже уверенно скажу что курс топ
Самый лучший курс по django который я встречал как на русскоязычном ютубе, так и на англоязычном. Мало кто заморачивается и рассказывает про тестирование и оптимизацию SQL. Хотелось бы посмотреть еще более подробно про ORM, а также про работу с сокетами в django.
солидарен полностью!!! обычно курс такой же как и другие на 90%. Тут, для меня (новичка), почти все новое. Спасибо автору за его старания!
Сеньор Помидор Девелопер, снимаю перед тобой шляпу! Так подробно и доходчиво мало кто рассказывает. Жду новых интересных кейсов из реальной практики программирования.
И снова спасибо!
Про дз для уменьшения полей можно убрать select_related и использовать django.db.models.F
Для prefetch_related - django.db.models.Prefetch, в котором в queryset использовать метод only
Вот по другому не могу сказать про ваш труд, ищешь серебро, а находишь золото :) Помимо Джанго начал лучше работать с Докуминтацией, скачал тонну сторонник вспомогательных вещей и узнал много сервисов для работы с основной темой поиска . Спасибо!
Рад что понравилось!
ДЗ
1) Убираем select_related('owner) пишим внутри annotate: owner_name=F('owner__username')
2) Вместо prefetch_related('readers') пишим prefetch_related(Prefetch('readers', queryset=User.objects.all().only('first_name', 'last_name'))
Запрос хорошо так сжимается в итоге
Это мне ДЗ? Ну спасибо 😁
Вау. Про F('owner__username') догадался почти сразу, а вот про prefetch_related(Prefetch('readers', queryset=User.objects.all().only('first_name', 'last_name') вообще не знал. Ща буду изучать, спасибо ;)
@@devidbrown8176 тоже самое у меня, вижу ты как и я изучаешь джанго сейчас, давай учить вместе если не против
Огромнейшее спасибо! Это лучший курс по Django из всех, что видел!
Очень полезная и нужная тема, спасибо!
Здравствуйте еще раз!
Я за всю свою жизнь не писал столько комментариев, как вам под ваши видео.
Еще раз хочу поблагодарить на прекрасный урок, ORM запрос получился вообще здоровый, но главное оптимизированный. Дз сделал, запрос получился еще более оптимизированее!
Удачи вам в развитии!
Супер! Раз что мои видео так вам подошли. Продолжайте в том же духе!
Хороший курс, подробно объяснил, спасибо)
Не знал, что Томас Шелби в программирование умеет. Спасибо за ролик!
😁
Радуют новые видео! Благодарю за контент! п.с.: при удалении строки в pycharm удобно использовать команду cmd+delete (на macos)
Спасибо. Знаю , использую ) может не всегда
Спасибо, продолжайте
Большое спасибо за ценную информацию
Спасибо, такого нигде не видел. По ДЗ получилось убрать лишние поля через аннотате, правда средняя скорость не уменьшилась. Кстати наверняка здесь есть возможность посчитать среднюю скорость запросов и потом сравнить, при разных настройках. Кстати для ДЗ еще пришлось убрать из аннотате .select_related('owner'), иначе поля все равно выгружались все.
Тут не нужно оценивать скорость в тестах на локальной пустой базе . Когда много будет записей и под нагрузкой , будет совсем другая картина и оптимизация будет очень нужна. Тогда, будет видно по запросам что конкретно нужно будет оптимизировать . Тут всегда вопрос баланса , если база спроектирована гибко и удобно, то запросов больше, если база более плоская и меньше связей то запросов меньше. Но всё-таки лучше делать удобно и гибко , а потом оптимизировать , добавлять индексы и кеш.
спасибо!👍
Хотел посмотреть чисто этот урок, чтобы освежить память - по итогу пересмотрел весь курс
У тебя есть бусти? патреон ? Может будешь делать какие-то платные курсы?
Спасибо за такую инициативу! Пока меня нет на этих платформах. Может будут платные курсы, подумаю . Точно ещё будут бесплатные.
сеньёр, а можно ли вообще сделать select_related для поля с ForeignKey и без read_only?
проще говоря у книги есть поля категория, которое связано с моделью CategoryModel
если в сериализаторе указать category = serializers.CharField(source='category.id'), то в тесте update говорится
что это поле либо должно быть read_only=True, либо не должно содержать .id
если убрать .id , то говорится что нет смысла делать category = serializers.CharField(source='category)
в итоге чтобы все работало дополнительный sql запрос для category остается
если способы как это оптимизировать ?
Что-то так сложно навскидку ответить
Пишу комментарий чтобы по быстрей вышли новые ролики))
тулбар активировался только после:
1. manage.py collectstatic
2. For Windows, you need to edit the registry. Set HKEY_CLASSES_ROOT\.js\Content Type to text/javascript.
Спасибо за урок! Очень интересно и ешё более полезно! Так что же это получается, annotate стоит использовать всегда, когда это только возможно?
Задание норм =)
Ну всегда, когда это нужно. А если annotate экономит нам запросы то можно смело использовать для этих целей .
Насколько я понимаю, в DRF мы берем переменную queryset и в неё через аннотации передаем множество полей, которые хотим увидеть в конечном json формате?
Т.е. тут нет такого, как в обычном Django, где мы, допустим, делаем квери запросы и передаем их в контекст под разными именами? Или в DRF это тоже имеет место быть, но нужно уже метод get_queryset писать?
Сори, может не очень понял вопрос.
ORM одинокого работает в Django и DRF. Мы можем сами формировать response во вью , и тогда как-бы словарь , который мы формируем для response будет аналогично как контекст во вью с шаблоном .
А можем это сделать в get_queryset если это Api View. Можно через сериализатор типа автоматически.
Но в аннотации мы не определяем список полей , которые хотим увидеть в JSON. Мы там создаем только те поля, которых нет в базе и это скорее исключительный случай
@@SeniorPomidorDeveloper аа, понял, спасибо! Да, вы меня правильно поняли)
сир помидор, спасибо за урок, он пришелся как раз вовремя. когда я задумался о том, почему дебагер ругается на скорость, пофиксил почти всё благодаря тебе. очень жду урок по правам и модерации, очень надеюсь, что он у тебя в планах. если нет, то, может, сделаешь какой-то экстра ролик? или дай что почитать, пока нагугливается только говно, а что-то ценное чрезвычайно медлено находится на stackoverflow. да и вообще все уроки в тырнетах, в отличие от твоих не имеют ничего общего с реальными проектами, которые окажутся в сети.
Хах. Спасибо! По правам уже есть один урок . По модерации пока нет. В принципе, я хотел рассказать о FSM на примере модерации, но не уверен что получится ближайшее время . Тема большая . А что конкретно хотелось узнать о правах и модерации ?
Доброго времени суток! Может, подскажете, я далеко не опытный разработчик, может подскажете или наведете на путь, вот проходил курсы в первый раз у вас очень давно, на работу устроиться получилось, но не совсем по джанго, но все равно ваши курсы помогли очень ) и вопрос такой встал, что все же хочу стать именно веб разработчиком, но задался вопросом, а может все таки не Джанго, а использовать другой язык и фреймворк. Понимаю, что это все инструменты и они достигают одни и те же цели примерно, но почему то часто сталкиваюсь с вакансиями по Java spring boot, php symphony и задумался, почему их так много и закралась мысль, что может и не в том направлении я изучил и изучаю веб, точнее, не с тем языком.. может у вас какие мысли есть на этот счёт ? Просто хотя бы рассуждения, может они мне помогут поставить все точки над и)
Добрый день! Рад что получилось найти работу, сейчас очень большая конкуренция среди Джуниоров . Сравните именно количество вакансий. По python я думаю что больше чем по Java или php. А по Django наверно больше чем по другим веб фреймворкам.
Но если интересно что-то другое то это очень хорошо! Php изучать не советую , он уже очень устарел и его везде вытесняет python . Java все еще актуальный язык в интерпрайс сегменте (банки и тд) , большой бизнес , не стартапы. Сложность только в том что он очень сложный и потребуется много времени. Но если к питону вы знаете какой-то строгий ООП язык, это большой плюс в резюме .
Советую обратить внимание на Go или он же Golang. Вот он сейчас очень в тренде и во многом обыгрывает питон в плане веба, намного быстрее и не такой сложный как Java. Многие компании в дополнение к сервисам на питоне пишут микосервисы на Go. Думаю за ним будущее , если он питон в вебе не вытеснит , то точно потеснит его неплохо
@@SeniorPomidorDeveloper да, спасибо огромное ! Как раз Golang по работе тоже требуется, изучаю и применяю его тоже, правда у него своеобразное ООП )) а так да, микросервисы прям хорошо заходит, после си как раз питон изучал , вот ваши курсы в том числе и Golang вот по работе тоже )
@@SeniorPomidorDeveloper тогда продолжу изучать веб с Джанго и питоном, а там если потребуется перейти я думаю попроще будет, чем с нуля изучать все )
Ну отличный набор! Думаю этого вполне достаточно
Спасибо за видео! Полдня потратил, но так и не удалось запустить последнюю версию django-debug-toolbar 3.2 , которую PyCharm ставит по умолчанию. А также 3.0 и 3.1. Пришлось откатится на 2.2 - все работает. Гугл говорит, что это не редкая проблема. (Django 3.1.5)
Да, бывает такое
Лучший !
как в drf сделать так, чтобы юзер вводил емейл, на который бы ему приходил код подтверждения, который он должен был бы ввести, чтобы ему выслали токен
Тема для ещё одного видео )
используй бибилиотеку rest-auth там готовая аутентификация из коробки по токенам и сессиям и jwt токенам также, на email приходит письмо с сcылкой когда юзер нажимает на ссылку на клиенте должен быть этот урл обрабатывается и слаться запрос на сервер с uuid, token которые нужно получит из урла
Как в таком случае фильтровать, например, по количеству лайков?
Это домашнее задание
Это было "вау"
домашнее задание делается через owner_name=F('owner__username'), без select_related?
Похоже на правду
@@SeniorPomidorDeveloper а будет видео про imagefield?
Мм . Не уверен, может позже. Это там через api это по особенному делается . Но идея хорошая, согласен
извините, можете показать код где
это пишете? у меня не получается
@@lightkingbeknazarov7919 не буду спойлерить )
Варламов программировать начал?)
🤣🤣
Кто нибудь знает почему 0 sql запросов? хотя все миграции таблицы существуют
django-debug-toolbar не работает(
нашел решение
нужно в urls.py в условие if settings.Debug добавить следующие строки:
import mimetypes
mimetypes.add_type("application/javascript", ".js", True)
Ого 😱
здравствуйте сениор помидор,видео как всегда отличное,но у меня есть один error,который не знаю как исправить, после того,как скачал и установил debug-tooler,
но после этого,когда я выхожу из админки и пробую опять логинитья приходит такое сообщение "302 Found
Location: /admin/login/?next=/admin/
The Django Debug Toolbar has intercepted a redirect to the above URL for debug viewing purposes. You can click the above link to continue with the redirect as normal. "
После этого,когда в django-swagger-е стал логиниться,сайт стал не понимать,что я логинюсь.Как все это настроить?
Не знаю, не встречал такую проблему . Если погуглить то видно что с ней кто-то сталкивался и кто-то предлагает разные решения . Переменная там есть какая-то связанная с этими редиректами . Со swagger я в курсе их не использовал , тоже не знаю какие вместе у них могут возникнуть проблемы ...
Senior Pomidor Developer если честно гуглил,но не нашел ничего...думал вы сталкивались.Спасибо за ответ!
Вот что нашёл stackoverflow.com/questions/33545798/the-django-debug-tool-lead-to-an-redirect-loop-on-admin-site и github.com/jazzband/django-debug-toolbar/issues/996
Senior Pomidor Developer посмотрю,спасибо.
Senior Pomidor Developer кстати,есть еще один вопрос,хотел-бы задать.
Есть тестовое задание.
Сайт,где при выборе фильма для просмотра генерируется ссылка,после чего,когда отправляете ссылку другу,вы можете смотреть фильм вдвоем и переписываться.Вы знаете как это создать через django rest framework или нет?
Рофлан в том что без этого крутого toolbara сайт грузится раз в 8 быстрее, и если что то и надо оптимизировать, то логику отслеживания тулбаром чего либо, ибо она некорректна
Оптимизация SQL запросов в ORM - не используйте ORM.
Тоже вариант, хотя никто не мешает написать кривой и медленный SQL.
@@SeniorPomidorDeveloper Поэтому нужно учить SQL.
Нужно
@@iscultas все равно джун очень вряд-ли напишет запрос лучше, чем это делает ОРМ
Немного не понял почему при тестировании мы создали имя фамилию пользователю но никак не прописали что все пользователи читают все книги и тест спокойно прошел. Или в шести строках "UserBookRelation.objects.create(user=user1, book=book_1, like=True, rate=5)" про это и указывается автоматически?
UserBookRelation это про доступность книг и кто их читает. Это просто лайки и рейтинг . Вроде так было..
ordered dict != dict? AssertionError: [OrderedDict([('id', 1), ('name', 'Test bo[674 chars]])])] != [{'id': 1, 'name': 'Test book_1', 'price':[504 chars]2}]}]
Надо принтами оба результата запринтить и глазами сравнить
@@SeniorPomidorDeveloper идентичны. Кроме того что одни являются диктами а вторые ордеред диктами
Не. Assert эту разницу игнорирует, он умеет сравнивать dict и ordered dict. Это можно отдельно проверить чтобы убедиться. В чем-то еще дело
@@SeniorPomidorDeveloper спасибо за ответ! Всех благ тебе и процветания!!! Я уле писал но скажу ещё раз: это самые стоящие уроки в русскоязычном сегменте. Как идею для дополнения роликов было бы круто осветить возможности для ВСЕХ типов сериализаторов. Добра тебе!!!!
Спасибо большое!