В этой лекции мы изучим:
- Основы структуры проекта Django: разберёмся, что это за странные папки и файлы, которые появляются при создании нового проекта.
- Команда
django-admin startproject: создадим новый проект с её помощью и исследуем его. - Масштабируемая структура приложения: обсудим, как организовать проект так, чтобы "лет через пять" он всё ещё оставался понятным вам и вашей команде.
Основы структуры проекта Django
Когда мы создаём новый проект Django, он создаёт базовую структуру. На первый взгляд она может показаться немного непонятной, но не волнуйтесь, мы всё разложим по полочкам.
Вот как выглядит структура проекта по умолчанию:
myproject/ # Корневая директория проекта
├── manage.py # Главный "оркестр" проекта
├── myproject/ # Пакет проекта
│ ├── __init__.py # Указывает, что это Python-пакет
│ ├── settings.py # Настройки проекта
│ ├── urls.py # Основной файл маршрутов
│ ├── asgi.py # Настройки для ASGI-сервера (для асинхронных проектов)
│ └── wsgi.py # Настройки для WSGI-сервера (для развертывания)
⚠️ Некоторые файлы вначале выглядят "абракадаброй". Не пытайтесь всё заучить! Мы будем разбирать их постепенно в следующих лекциях.
Краткий обзор ключевых файлов:
manage.py: главный дирижёр вашего проекта. Он помогает запускать сервер, создавать приложения, выполнять миграции и много других крутых вещей.- Например, чтобы запустить сервер, вы введёте:
python manage.py runserver
- Например, чтобы запустить сервер, вы введёте:
settings.py: сердце проекта. Здесь хранятся все настройки, такие как информация о базе данных, конфигурация приложений и многое другое. Обязательно подружимся с ним на следующей лекции.urls.py: место, где роутятся все пути вашего приложения. Хотите настраивать маршруты и сказать, какой URL должен куда привести? Вам сюда.asgi.pyиwsgi.py: файлы, которые помогают развернуть проект на сервере. Пока что можете воспринимать их, как "что-то важное для жизни проекта на продакшене". Не трогаем их без необходимости.__init__.py: делает директорию Python-пакетом. Зачем? Чтобы Python знал, что можно импортировать файлы из этой директории.
Использование команды django-admin startproject
Теперь, пора двигаться от слов к практике! Давайте создадим наш собственный проект и посмотрим, как магия превращается в структуру.
Создайте виртуальное окружение (если ещё не сделали):
python -m venv env source env/bin/activate # для Linux/Mac env\Scripts\activate # для WindowsУбедитесь, что Django установлен:
pip install djangoСоздайте новый проект с командой
django-admin startproject:django-admin startproject myprojectЭто создаст папку
myprojectс описанной ранее структурой.Перейдите в созданный проект:
cd myprojectЗапустите сервер, чтобы убедиться, что всё работает:
python manage.py runserverОткройте http://127.0.0.1:8000/ в браузере. Если видите стандартную приветственную страницу Django — поздравляю! Это первый шаг к величию.
Организация проекта для масштабируемого приложения
По мере того как проект растёт, хаос может превратить его в "кодовый ад". Чтобы этого избежать, важно изначально позаботиться об организации.
Проблема стандартной структуры
Вот стандартная структура, после создания нового проекта:
myproject/
├── myproject/
│ ├── settings.py
│ ├── urls.py
Если вы хотите написать большой проект с множеством приложений и настройками для разработки, тестирования и продакшена — такая структура может стать неудобной.
Рекомендуемая масштабируемая структура
Предлагаем модифицировать проект и организовать его примерно так:
myproject/
├── apps/ # Здесь будут лежать все ваши приложения
├── config/ # Настройки проекта
│ ├── __init__.py
│ ├── settings/
│ │ ├── base.py # Основные настройки
│ │ ├── dev.py # Настройки для разработки
│ │ └── prod.py # Настройки для продакшена
│ ├── urls.py
│ ├── wsgi.py
│ └── asgi.py
├── manage.py
├── requirements.txt
Почему так?
Каталог
apps/:- Все ваши приложения (например, "блог", "магазин") будут находиться в одном месте.
- Удобно искать и управлять.
Каталог
config/:- Настройки теперь раздельные для разных сред:
base.py,dev.pyиprod.py. - Легче делать деплой, и вы случайно не включите
DEBUG=Trueна продакшене (а это чревато, как оставить ключи от дома на столе в кафе).
- Настройки теперь раздельные для разных сред:
Как настроить разделение настроек?
В файле manage.py и wsgi.py можно указать, с каким файлом использовать настройки:
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings.dev')
Теперь, если вы в продакшене, измените dev на prod.
Практическое задание
- Создайте проект Django с именем
myproject. - Организуйте структуру так, как было показано выше (с
appsиconfig). - Настройте разделение настроек на
base.py,dev.pyиprod.py.
Совет: начните с копирования содержимого settings.py в base.py, а потом разделите параметры, специфичные для разработки и продакшена.
Вот и всё! Теперь вы знаете, как создать проект Django и организовать его для долгой и счастливой жизни.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ