Шаг 02. БД, миграции, суперпользователь

📁 Серия: Капстоун B ⏱️ ~20 мин 🎯 Сложность: Начальная
#migrate #startapp #createsuperuser #django-admin

⚡ Кратко: что делаем на этом шаге

Цель: Создать приложение catalog, применить начальные миграции Django, создать суперпользователя и войти в Django Admin.

  • Команды: python manage.py startapp catalog, python manage.py migrate, python manage.py createsuperuser
  • Файлы: catalog/ (новая папка), config/settings.py (добавить catalog)
  • Результат: сервер запущен, вход в http://127.0.0.1:8000/admin/ работает

🎯 Цель этапа

На этом шаге мы создаём Django-приложение catalog, регистрируем его в проекте, применяем начальные миграции (создают таблицы auth, admin, sessions и пр.) и создаём суперпользователя. После шага у нас будет работающий Django Admin, в который можно войти.

💡 Начальные миграции Django: При первом migrate Django применяет встроенные миграции всех INSTALLED_APPS: создаются таблицы для пользователей, групп, сессий, логов действий Admin и пр. Ваши миграции появятся позже — когда вы создадите модели в catalog.

После этого шага у нас будет

  • Приложение catalog в структуре проекта
  • Файл db.sqlite3 со всеми встроенными таблицами
  • Суперпользователь для входа в Admin
  • Работающий сервер разработки: http://127.0.0.1:8000/admin/

📄 Затрагиваемые файлы

ФайлДействиеОписание
catalog/Создать (startapp)Новое Django-приложение
config/settings.pyИзменитьДобавить "catalog" в INSTALLED_APPS
db.sqlite3Создаётся migrateБаза данных SQLite

🔨 Шаги

1. Создаём Django-приложение catalog

💻 Терминал (venv активирован, корень проекта)
python manage.py startapp catalog

Структура после команды:

library_catalog/
├── catalog/
│   ├── __init__.py
│   ├── admin.py          # ← будем заполнять на шагах 04–05
│   ├── apps.py
│   ├── migrations/
│   │   └── __init__.py
│   ├── models.py         # ← будем заполнять на шаге 03
│   ├── tests.py
│   └── views.py          # ← будем заполнять на шаге 06
├── config/
│   └── ...
└── manage.py

2. Регистрируем приложение в settings.py

📄 config/settings.py
# config/settings.py — находим INSTALLED_APPS и добавляем "catalog"

INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    # наши приложения
    "catalog",            # ← добавляем
]
💡 Зачем регистрировать? Django не знает о приложении, пока оно не в INSTALLED_APPS. Без регистрации makemigrations не найдёт модели из catalog, Admin не увидит зарегистрированные модели, шаблоны из catalog/templates/ не загрузятся.

3. Применяем начальные миграции

💻 Терминал
python manage.py migrate

Django покажет список применяемых миграций:

Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  ...
  Applying sessions.0001_initial... OK

4. Создаём суперпользователя

💻 Терминал
python manage.py createsuperuser

Django задаст вопросы интерактивно:

Username (leave blank to use 'admin'): admin
Email address: admin@example.com
Password: ••••••••
Password (again): ••••••••
Superuser created successfully.

5. Запускаем сервер разработки

💻 Терминал
python manage.py runserver

🧠 Объяснение логики

makemigrations vs migrate

makemigrations — читает ваши модели и создаёт файлы миграций (Python-скрипты, описывающие изменения схемы БД). migrate — применяет эти скрипты к реальной БД. На этом шаге мы запускаем только migrate — применяем встроенные миграции Django. Свои миграции появятся на шаге 03, когда создадим модели.

Почему суперпользователь важен

Суперпользователь имеет доступ ко всему Django Admin без явного назначения прав. В production-проекте суперпользователей должно быть минимум, а для сотрудников — создавать обычных пользователей с группами прав. В нашем учебном проекте один суперпользователь для удобства разработки.

⚠️ Частая ошибка: Запустить runserver до migrate. Django выдаст предупреждение: "You have N unapplied migration(s)..." и некоторые функции Admin не будут работать. Всегда применяйте миграции перед запуском сервера.

✅ Проверка

1. Открываем Django Admin

💻 Браузер
http://127.0.0.1:8000/admin/

2. Ожидаемый результат

Успех: Открывается страница входа Django Admin. После ввода логина/пароля суперпользователя — стандартный дашборд с разделами «Authentication and Authorization» (Users, Groups). Наших моделей там пока нет — они появятся после шагов 03 и 04.

Диагностика: если что-то пошло не так

  • Ошибка: OperationalError: no such table: auth_user — не выполнена команда migrate
  • Неверный логин/пароль в Admin — пересоздайте суперпользователя: python manage.py createsuperuser
  • Ошибка: catalog не найдено в INSTALLED_APPS (при makemigrations позднее) — проверьте правописание "catalog" в settings.py

➡️ Что дальше

На следующем шаге мы создадим модели: Author, Genre, Publisher, Book, BookCopy. Добавим ForeignKey, ManyToMany, OneToOne, правильные Meta, __str__, валидаторы и full_clean(). Это закроет callout-verify из урока 15.

  • Готово: приложение catalog, migrate, суперпользователь, Admin работает
  • Далее (шаг 03): catalog/models.py — все сущности библиотеки
  • После шага 03: запустим makemigrations и увидим наши таблицы