Давайцте поговорим об организации кода внутри приложения.
Представьте, что вы готовите ужин на кухне. В идеале, у вас есть разные шкафы для кастрюль, сковородок, тарелок, а у холодильника — свои полки для овощей и продуктов. В противном случае вы тратите кучу времени на поиски ножа или соли, а процесс готовки превращается в хаос.
То же самое с кодом. Если вы не разбиваете проект на логичные модули, то по мере роста приложения вам будет всё сложнее находить нужные файлы, а новые разработчики на проекте начнут задавать неудобные вопросы вроде: "А зачем у нас три views.py?" или "Почему файл с логикой заказа еды называется utils.py, а не находится в приложении для доставки?"
Применяя осмысленную структуру в вашем приложении, вы:
- Легко находите нужный код и файлы.
- Делаете приложение читаемым для других разработчиков (и для вас через полгода).
- Снижаете риск багов, связанных с запутанной логикой.
- Открываете путь к модульному тестированию.
Важное правило: организация кода зависит от функциональности приложения. Для небольших приложений простая структура может быть достаточной, но для крупных стоит подумать о разделении логики на модули.
Основные модули внутри приложения
Запустим команду python manage.py startapp blog. Мы получаем "скелет" приложения с примерно следующей структурой:
blog/
├── migrations/
│ └── __init__.py
├── __init__.py
├── admin.py
├── apps.py
├── models.py
├── tests.py
├── views.py
migrations/: Любимые друзья базы данных. В этом каталоге хранятся файлы миграций — инструкции по изменению структуры базы данных в соответствии с моделями.__init__.py: Просто делает наш каталог Python-пакетом. Не удаляем.admin.py: Здесь настраивается отображение моделей в админке. Можно кастомизировать список, добавить фильтры и так далее.apps.py: Файл конфигурации приложения, который Django использует при запуске.models.py: Место, где описываются модели (то есть, структура данных, которая будет храниться в базе).tests.py: Пустое место для тестов. О тестировании поговорим позже.views.py: Тот самый файл, где живут представления (views).
Если всё выглядит знакомо, отлично! Но в реальности набор этих файлов — только отправная точка. В реальном проекте мы можем (и должны) добавлять новые файлы и модули, чтобы хранить логику в понятных местах.
Разделение логики внутри приложения
Вы наверняка слышали такое понятие, "спагетти"-код. Это когда представления, модели и маршруты в проекте перемешаны, и могут выглядеть как спутанные макароны. Представьте, что в файле views.py содержится 300 строк кода — представления для всего приложения: CRUD для блога, обработка формы для комментариев, API для лайков и всё остальное.
views.py можно создать папку
views/ и разнести всё по отдельности. Например:
blog/
├── views/
│ ├── post_views.py
│ ├── comment_views.py
│ └── like_views.py
Теперь каждое представление живёт в своём файле, и искать их стало гораздо легче. Но это только начало.
Пример структуры приложения
Для приложения "Блог" (где есть статьи, комментарии, авторы и лайки) структура может выглядеть следующим образом:
blog/
├── migrations/
├── templates/
│ └── blog/
│ ├── post_list.html
│ ├── post_detail.html
│ └── comment_form.html
├── static/
│ └── blog/
│ ├── css/
│ ├── js/
│ └── images/
├── views/
│ ├── post_views.py
│ ├── comment_views.py
│ └── like_views.py
├── forms.py
├── models/
│ ├── post.py
│ ├── comment.py
│ └── author.py
├── urls.py
└── admin.py
Разберём, почему такая структура удобна:
Папка
views/: представления разделены по сущностям. Если вам нужно отредактировать CRUD-компонент для постов — заходите вpost_views.py. Минимальный хаос.Папка
models/: здесь тоже всё разделено. Каждая главная сущность приложения (например, Пост, Комментарий) имеет отдельный файл модели. Это особенно полезно, если у моделей много полей и методов.forms.py: все формы (например, форма для добавления комментария) хранятся в одном месте.Папка
templates/blog/: Django позволяет создавать инфернальные папки для шаблонов, но всегда лучше держать все шаблоны в каталоге, соответствующем названию приложения.Папка
static/blog/: аналогично с шаблонами — организуем статические файлы в папке, соответствующей приложению.
Этот принцип — разделение по функционалу и сущностям — является ключевым для построения аккуратного проекта.
Лучшие практики (Best Practices) по организации
Чтобы ваш код выглядел так же приятно, как чистый рабочий стол:
- Делите представления на модули: если приложение становится слишком большим, не бойтесь делить код на подкаталоги.
- Разделяйте файлы моделей: если моделей много, лучше их вынести в подкаталог.
- Старайтесь не злоупотреблять
utils.py: всегда есть соблазн кинуть код "куда-нибудь". Лучше выписывать отдельные модули для вспомогательной логики (например,services.pyилиhelpers.py). - Соблюдайте именование: названия файлов и модулей должны быть интуитивными. Лучше назвать файл
post_views.py, чемmisc_views.py.
Практические задания
Задание 1: Рефакторинг приложения "Блог"
- Создайте в вашем приложении "Блог" директории
views/иmodels/. - Переместите логику для работы с постами в файл
views/post_views.py. - Разделите модели по сущностям: создайте файл
models/post.pyдля модели поста иmodels/comment.pyдля модели комментариев. - Настройте импорты, чтобы проект продолжал работать.
Задание 2: Структурирование шаблонов
- Создайте папку
templates/blog/и перенесите туда все шаблоны, связанные с приложением "Блог". - Перепроверьте правильность путей в представлениях.
Задание 3: Организация статических файлов
- Добавьте папку
static/blog/и перенесите туда хотя бы один CSS-файл. - Убедитесь, что статические файлы подгружаются корректно.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ