JavaRush /Курсы /Модуль 3: Django /Структура проекта Django

Структура проекта Django

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

Теперь пришло время заглянуть внутрь созданного проекта и разобраться, какова структура Django-проекта. Чтобы не бояться папок и файлов, которые, на первый взгляд, выглядят, как схема токийского метро.

Когда вы создаёте Django-проект, он уже предоставляет вам всё необходимое для начала разработки. Но как только проект начнёт «расти» и обретать форму, структура сыграет ключевую роль в его поддержке. Интуитивно понятная организация файлов — это не просто красота! Она влияет на:

  • удобство навигации для вас и вашей команды,
  • простоту добавления новых функций,
  • скорость отладки,
  • масштабируемость и поддержку кода в будущем.

Проще говоря, это основа, на которой вы строите ваш веб-приложение.

Что создаётся командой startproject?

Когда вы выполняете команду django-admin startproject myproject, Django создаёт структура файлов, похожая на эту:

myproject/
│
├── manage.py          
├── myproject/         
│   ├── __init__.py    
│   ├── settings.py    
│   ├── urls.py        
│   ├── asgi.py        
│   └── wsgi.py        

Теперь разберем, что именно представляют собой эти файлы и папки.

Корневая директория проекта

myproject/ — корневая папка проекта

  • Это основная папка, в которой стартует ваш проект. Она создаётся в том месте, где вы запустили команду startproject.
  • В ней находятся:
    • Скрипт manage.py.
    • Вложенная папка с таким же именем, как ваш проект myproject, в которой лежат настройки проекта.

Файл manage.py

Этот файл — ваш друг и союзник! Он служит командным центром для управления проектом. Хотите запустить сервер? Создать приложение? Сделать миграции? Можно, используйте manage.py.

Пример использования:

# Запуск локального сервера
python manage.py runserver

# Создание нового приложения
python manage.py startapp myapp

# Применение миграций
python manage.py migrate

Для любителей аналогий: manage.py — ваш пульт управления космическим кораблем Django.

Папка <имя_проекта>/ (например, myproject/)

Эта папка имеет то же имя, что и ваш проект. Она содержит конфигурационные файлы, которые делают ваш проект «живым».

Файл __init__.py

Этот файл делает папку myproject модулем Python. Без него Python не будет воспринимать папку как пакет. Сам файл, как правило, пустой (но иногда его можно использовать для некоторых хитрых вещей, например, импорта).

Файл settings.py

Файл настроек — это мозг вашего проекта. Здесь вы конфигурируете всё: от подключения к базе данных до настроек безопасности. Вот основные секции:

  • INSTALLED_APPS: список приложений проекта, например, админка, формы, ваш код.
  • DATABASES: настройки для базы данных.
  • TEMPLATES: настройки шаблонов.
  • STATIC_URL и MEDIA_URL: указание путей для статических (CSS, JS) и медиафайлов (загружаемые картинки).

Пример сокращённого файла settings.py:

# settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

STATIC_URL = '/static/'
MEDIA_URL = '/media/'

Файл urls.py

Файл маршрутов, или, как его называют в Django, URLConf. Именно здесь вы указываете, какому представлению должен быть передан запрос от конкретного URL. Например:

from django.contrib import admin
from django.urls import path

urlpatterns = [
    path('admin/', admin.site.urls),  # Путь к админ-панели
]

Не переживайте, в лекциях о маршрутизации мы вернёмся к этому файлу ещё много раз.

Файл asgi.py

Этот файл используется для конфигурации ASGI (Asynchronous Server Gateway Interface) сервера. Если вы решите добавить в проект асинхронные возможности, например, чаты или WebSocket соединения, ASGI станет вашим героем.

Файл wsgi.py

Похож на asgi.py, но для WSGI (Web Server Gateway Interface). Этот файл используется для деплоя вашего проекта на продакшене. Обычно его трогать не приходится.

Расширение проекта

Django следует принципу «разделяй и властвуй»: вместо того, чтобы свалить весь код в одну кучу, он предполагает, что ваш проект будет состоять из нескольких приложений (apps). Приложения-к-django — это отдельные модули, которые выполняют конкретные задачи, например, блог, магазин или система комментариев.

Как создавать новые компоненты?

Хотите добавить новую функциональность в проект? Например, раздел новостей? Тогда создайте для него отдельное приложение:

python manage.py startapp news

После выполнения этой команды появится новая структура:

news/
├── admin.py
├── apps.py
├── models.py
├── tests.py
├── views.py
└── migrations/
    └── __init__.py

Каждый файл здесь отвечает за свою часть функциональности:

  • models.py — здесь определяются модели данных, которые связаны с базой данных
  • views.py — здесь пишется логика обработки запросов.
  • admin.py — настройка отображения модели в админке.
  • tests.py — тесты для вашего приложения.

Не забудьте зарегистрировать новое приложение в INSTALLED_APPS в файле settings.py:

INSTALLED_APPS = [
    ...
    'news',  # наше новое приложение
]

Визуальная схема структуры проекта

myproject/
│
├── manage.py                    # Командный центр проекта
├── myproject/                   # Конфигурационная папка проекта
│   ├── __init__.py              # Делает папку модулем Python
│   ├── settings.py              # Настройки проекта
│   ├── urls.py                  # Маршрутизация
│   ├── asgi.py                  # ASGI-конфигурация
│   └── wsgi.py                  # WSGI-конфигурация
├── myapp/                       # Пример приложения
│   ├── admin.py                 # Настройки админки
│   ├── apps.py                  # Настройки приложения
│   ├── models.py                # Модели данных
│   ├── tests.py                 # Тесты
│   ├── views.py                 # Представления
│   └── migrations/              # Миграции базы данных
│       └── __init__.py

Особенности и подводные камни

Когда вы только начинаете работать с Django, структура проекта может показаться немного сложной из-за большого числа файлов. Вот несколько советов:

  1. Не бойтесь удалять пустые файлы, если не используете их. Например, не пишете тесты сейчас — уберите tests.py. Главное, чтобы потом не забыть их добавить.
  2. Разделение на приложения — это не всегда строго. Иногда два небольших модуля можно объединить в одно приложение, чтобы не плодить сущности.
  3. Держите настройки для разных окружений отдельно. Например, вы можете создать settings_dev.py для разработки и settings_prod.py для продакшен-сервера. Это улучшит поддержку.

Теперь вы можете уверенно работать со структурой Django-проекта и досконально понимаете, что делает каждый файл. В следующей лекции мы начнем углубляться в работу с командами manage.py и созданием первого приложения!

1
Задача
Модуль 3: Django, 1 уровень, 5 лекция
Недоступна
Создание приложения
Создание приложения
1
Задача
Модуль 3: Django, 1 уровень, 5 лекция
Недоступна
Создание еще одного приложения
Создание еще одного приложения
Комментарии (6)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Александр Уровень 93
2 июля 2025
Если задачи выполнять в IDE, то для каждой задачи нужно устанавливать Django?
Евгений Уровень 93
14 июля 2025
Да. Для каждой задачи, где требуется создать проект/приложение, нужно устанавливать venv, активировать venv, установить Django и т.д.
Ivan Уровень 59
22 июня 2025
Эти задания (и возможно следующие) невозможно выполнить на сайте. Их надо выполнять в IDE через плагин, установив Джанго, виртуальное окружение и создав соответствующие приложения (проект создавать не надо, он уже создан).
Артём Васенин Уровень 93
29 июня 2025
Попробовал, но плагин выдает "неизвестную ошибку сервера", и никаких объяснений
Ivan Уровень 59
29 июня 2025
Если ошибка сервера, то это скорее всего никак не связано с Джанго. Возможно, нужен ВПН. А другие задания через плагин выполняются?
Евгений Уровень 93
14 июля 2025
Тоже столкнулся с проблемой "Неизвестная Ошибка". Это валидатор сходит с ума от venv. Перед отправкой задачи на проверку удаляешь папку venv и валидатор пропускает решение. Надеюсь, это вскоре поправят )