5 ошибок в Django, которые ломают проект задолго до выхода в прод
Django часто берут за скорость старта, но именно на старте закладывают проблемы, которые потом больно чинить.
— Логика в views и serializers. Когда бизнес-правила размазаны по представлениям, тесты становятся хрупкими, а изменения — дорогими. Выносите правила в services, use cases или доменные методы.
— Слишком ранний уход в raw SQL. ORM закрывает большую часть задач и помогает не плодить несовместимые запросы. SQL нужен, но как точечный инструмент, а не стиль жизни.
— Модели без явных ограничений. Если уникальность, nullability и связи не зафиксированы в схеме, баги начинают жить в приложении. База должна проверять то, что может проверить сама.
— Слабая работа с миграциями. Большие миграции, переименование полей «в лоб» и удаление без этапов отката — типичный путь к простоям.
— Игнорирование индексов и запросов. Django не спасает от N+1, тяжёлых select_related/prefetch_related и фильтрации по неиндексированным полям.
Есть наблюдение которое стоит проверить: если новый разработчик не может за 10 минут понять, где у вас живёт бизнес-логика, проект уже начал усложняться.
Держите границу: модель — про данные и инварианты, сервис — про сценарий, view — про HTTP. Эта дисциплина окупается быстрее, чем кажется.
Django часто берут за скорость старта, но именно на старте закладывают проблемы, которые потом больно чинить.
— Логика в views и serializers. Когда бизнес-правила размазаны по представлениям, тесты становятся хрупкими, а изменения — дорогими. Выносите правила в services, use cases или доменные методы.
— Слишком ранний уход в raw SQL. ORM закрывает большую часть задач и помогает не плодить несовместимые запросы. SQL нужен, но как точечный инструмент, а не стиль жизни.
— Модели без явных ограничений. Если уникальность, nullability и связи не зафиксированы в схеме, баги начинают жить в приложении. База должна проверять то, что может проверить сама.
— Слабая работа с миграциями. Большие миграции, переименование полей «в лоб» и удаление без этапов отката — типичный путь к простоям.
— Игнорирование индексов и запросов. Django не спасает от N+1, тяжёлых select_related/prefetch_related и фильтрации по неиндексированным полям.
Есть наблюдение которое стоит проверить: если новый разработчик не может за 10 минут понять, где у вас живёт бизнес-логика, проект уже начал усложняться.
Держите границу: модель — про данные и инварианты, сервис — про сценарий, view — про HTTP. Эта дисциплина окупается быстрее, чем кажется.
