JavaRush /Курсы /Модуль 3: Django /Организация кода в приложении

Организация кода в приложении

Модуль 3: Django
6 уровень , 4 лекция
Открыта

Давайцте поговорим об организации кода внутри приложения.

Представьте, что вы готовите ужин на кухне. В идеале, у вас есть разные шкафы для кастрюль, сковородок, тарелок, а у холодильника — свои полки для овощей и продуктов. В противном случае вы тратите кучу времени на поиски ножа или соли, а процесс готовки превращается в хаос.

То же самое с кодом. Если вы не разбиваете проект на логичные модули, то по мере роста приложения вам будет всё сложнее находить нужные файлы, а новые разработчики на проекте начнут задавать неудобные вопросы вроде: "А зачем у нас три 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

Разберём, почему такая структура удобна:

  1. Папка views/: представления разделены по сущностям. Если вам нужно отредактировать CRUD-компонент для постов — заходите в post_views.py. Минимальный хаос.

  2. Папка models/: здесь тоже всё разделено. Каждая главная сущность приложения (например, Пост, Комментарий) имеет отдельный файл модели. Это особенно полезно, если у моделей много полей и методов.

  3. forms.py: все формы (например, форма для добавления комментария) хранятся в одном месте.

  4. Папка templates/blog/: Django позволяет создавать инфернальные папки для шаблонов, но всегда лучше держать все шаблоны в каталоге, соответствующем названию приложения.

  5. Папка static/blog/: аналогично с шаблонами — организуем статические файлы в папке, соответствующей приложению.

Этот принцип — разделение по функционалу и сущностям — является ключевым для построения аккуратного проекта.

Лучшие практики (Best Practices) по организации

Чтобы ваш код выглядел так же приятно, как чистый рабочий стол:

  • Делите представления на модули: если приложение становится слишком большим, не бойтесь делить код на подкаталоги.
  • Разделяйте файлы моделей: если моделей много, лучше их вынести в подкаталог.
  • Старайтесь не злоупотреблять utils.py: всегда есть соблазн кинуть код "куда-нибудь". Лучше выписывать отдельные модули для вспомогательной логики (например, services.py или helpers.py).
  • Соблюдайте именование: названия файлов и модулей должны быть интуитивными. Лучше назвать файл post_views.py, чем misc_views.py.

Практические задания

Задание 1: Рефакторинг приложения "Блог"

  1. Создайте в вашем приложении "Блог" директории views/ и models/.
  2. Переместите логику для работы с постами в файл views/post_views.py.
  3. Разделите модели по сущностям: создайте файл models/post.py для модели поста и models/comment.py для модели комментариев.
  4. Настройте импорты, чтобы проект продолжал работать.

Задание 2: Структурирование шаблонов

  1. Создайте папку templates/blog/ и перенесите туда все шаблоны, связанные с приложением "Блог".
  2. Перепроверьте правильность путей в представлениях.

Задание 3: Организация статических файлов

  1. Добавьте папку static/blog/ и перенесите туда хотя бы один CSS-файл.
  2. Убедитесь, что статические файлы подгружаются корректно.
1
Задача
Модуль 3: Django, 6 уровень, 4 лекция
Недоступна
Расширенная организация приложения
Расширенная организация приложения
3
Опрос
Создание приложений в Django, 6 уровень, 4 лекция
Недоступен
Создание приложений в Django
Создание приложений в Django
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ