Как правильно делать импорты в python | Django Rest Framework | Проект GSpot
HTML-код
- Опубликовано: 29 мар 2023
- Поговорим о том как правильно делать импорты в python. Какие подходы существуют.
Плюсы и минусы таких подходов к импортам.
Ваше мнение пишите в комментариях.
Спасибо всем кто помогает в создании данного проекта.
--=--
🔥Провожу индивидуальные занятия (ментор) по python, django, fastapi, javascript
📳 Moй Telegram - t.me/DJWOMS
--=--
Мы в сети:
Telegram канал - t.me/django_school
Telegram чат - t.me/trueDjangoChannel
Спонсорство - boosty.to/djangoschool
Донат - donatepay.ru/don/186076
Донат 2 - www.donationalerts.com/r/djan...
Сайт по Django - djwoms.pro
Сайт по Masonite - masonite.pro
ВК - djangochannel
--=--
#django #djangorestframework #djangoschool #python - Наука
Спасибо за контент! serializer_classes_by_action и permission_classes_by_action в Mixine перепределены?
Да
@@DjangoSchool Выглядит очень стильно и практично, возьму на заметку
На код было приятно смотреть. Хороший пример. И согласен, что использование * крайне опасно.
Мне нравится тема extra actions в DRF и вьюхи из-за этого кажутся большими и сериалайзеров пяток другой приходится импортировать. Но Почему-то привык их прописывать по отдельности. Тем более VSC делает это автоматом.
Интересует третий вариант, когда импорт делается внутри функции :)
Например есть два разных файла с сериалайзерами. И каждый использует сериалайзер другого. Вот тут кроме как импорта из функции кода не обойтись.
Тут по-моему что-то не то с планированием проекта, если такая ситуация.
А если создать отдельный файл типа import_for_views там прописать все импорты, а в обычный views импортировать из этого файла все через звездочку?
Тогда в самом views будет все компактно. Или так не получится?
Плохая читаемость в таком случае, мне кажется. Особенно для человека, который не знает, что в том файле находится
Что можете сказать например про такой импорт : ```from module import * ``` ?
Лучше так не делать. Могут быть проблемы. Как минимум с именованием.
from module import Hello # упадёт при запуске, если Hello в модуле нет
import module
и где-то там:
def f():
module.Hello # упадёт прямо в рантайме
Про это никогда не стоит забывать, если в проекте нет mypy/pyright
можно ссылку на проект из видео пожалуйста?
github.com/DJWOMS/fatcode
Сорян, но здесь не соглашусь. И у меня есть 3 аргумента
1. ИДЕ по умолчанию скрывает импорты.
2. Type Hinting. Слава Богу, тайп хинтинг становиться стандартом среди пайтонистов, и уже правило хорошего тона указывать тип. И тут как раз гораааздо удобнее писать
purchase: Purchase,
чем purchase: models.Purchase
3. Длина строчки и читаемость - без этих serializer, models строка короче и проще читаеться.
Исключение вижу только одно - если сам модуль - это набор функций (лень было писать клас)
import taxes
taxes.cancel_taxes(purchase)
Если разбивать логику по модулям, то и ваши, и Михаила предпочтения совпадут.
Что означает «:=» ?
Создаёт переменную и присваивает ей значнние
моржовый оператор
А через * нельзя делать импорт? Наверное, нельзя потому, что будут загружены все объекты.
В таком случае еще может возникнуть конфликт имен.
@@DjangoSchool Понимаю
Загружается не больше. Разница только в количестве имен в пространстве имён модуля.
Лучше бы про относительные и абсолютные пути рассказал, про переменную PYTHONPATH - вот где затыки бывают причем даже не только у новичков. А тут чисто какой-то очевидной фигни наготворил, если честно.
Каждый извлекает то что хочет для себя. Мне фишки с serializer_classes_by_action очень понравились, круто сделано.