Теперь пришло время заглянуть внутрь созданного проекта и разобраться, какова структура 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, структура проекта может показаться немного сложной из-за большого числа файлов. Вот несколько советов:
- Не бойтесь удалять пустые файлы, если не используете их. Например, не пишете тесты сейчас — уберите
tests.py. Главное, чтобы потом не забыть их добавить. - Разделение на приложения — это не всегда строго. Иногда два небольших модуля можно объединить в одно приложение, чтобы не плодить сущности.
- Держите настройки для разных окружений отдельно. Например, вы можете создать
settings_dev.pyдля разработки иsettings_prod.pyдля продакшен-сервера. Это улучшит поддержку.
Теперь вы можете уверенно работать со структурой Django-проекта и досконально понимаете, что делает каждый файл. В следующей лекции мы начнем углубляться в работу с командами manage.py и созданием первого приложения!
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ