Skip to content

Latest commit

 

History

History
350 lines (222 loc) · 12.1 KB

File metadata and controls

350 lines (222 loc) · 12.1 KB

Модуль 6. Урок 33. Подключение админ-панели. Регистрация моделей

Административная панель Django — это один из самых мощных встроенных инструментов фреймворка. Она создаёт удобный интерфейс для управления данными сайта: моделями, записями, связями, пользователями.

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


1. Админ-панель включена по умолчанию

Когда вы создаёте новый проект Django, административная панель уже настроена и включена:

  • в settings.py приложение django.contrib.admin уже присутствует в списке INSTALLED_APPS,
  • в urls.py создан маршрут /admin/.

Чтобы убедиться, можно открыть:

cinemahub_project/settings.pyINSTALLED_APPS

Вы увидите:

'django.contrib.admin',

А затем в cinemahub_project/urls.py:

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

urlpatterns = [
    path('admin/', admin.site.urls),
]

Это уже означает, что вы можете открыть админку в браузере.


2. Запуск сервера и переход в админ-панель

Запустите сервер:

python manage.py runserver

Откройте в браузере:

http://127.0.0.1:8000/admin/

Если всё настроено правильно, появится форма ввода логина и пароля.

Если видите ошибку — это важно:

  • ModuleNotFoundError: No module named 'django.contrib.admin' — кто-то случайно удалил модуль из INSTALLED_APPS.
  • Page not found (404) — вы могли изменить маршрут в urls или удалить admin.site.urls.
  • ImproperlyConfigured — ошибка в настройках проекта.

3. Настройка языка админ-панели

По умолчанию Django загружает английский интерфейс.

Для русскоязычного курса мы переключим его на русский.

Откройте settings.py и найдите:

LANGUAGE_CODE = 'en-us'

Замените на:

LANGUAGE_CODE = 'ru-RU'

Перезапустите сервер и обновите страницу /admin/.

Теперь интерфейс будет полностью на русском.


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

Чтобы войти в админ-панель, нужен суперпользователь — учётная запись с максимальными правами.

Создаём его командой:

python manage.py createsuperuser

Далее Django предложит заполнить поля:

  • Имя пользователя: например, root
  • Email: root@cinemahub.local
  • Пароль: 1234 (В реальных проектах — только сложные пароли)

После успешного создания попробуйте войти в /admin/ под этими данными.

Если при создании видите предупреждение:

This password is too common

— Django предупреждает, что пароль небезопасный. Для учебного проекта это допустимо, подтверждайте y.


5. Первое знакомство с админ-панелью

После входа вы увидите два блока:

  • Пользователи
  • Группы

Это встроенные модели Django.

Однако наши модели cinemahub пока нигде не отображаются — мы их ещё не зарегистрировали.


6. Регистрация моделей в админ-панели

Предположим, что в нашем приложении movies (часть проекта cinemahub) существует модель Movie:

# movies/models.py

from django.db import models

class Movie(models.Model):
    title = models.CharField(max_length=255)
    description = models.TextField()
    year = models.PositiveIntegerField()

    def __str__(self):
        return self.title

Чтобы она появилась в админке, её необходимо зарегистрировать.

Откройте файл:

movies/admin.py

и добавьте:

from django.contrib import admin
from .models import Movie

admin.site.register(Movie)

Проверка

  1. Перезагрузите страницу /admin/.
  2. Убедитесь, что появилось приложение Movies и внутри — модель Movies.

Если видите ошибку:

Model class movies.models.Movie doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.

→ значит приложение movies не добавлено в INSTALLED_APPS.


7. Настройка отображения модели

Чтобы админ-панель выглядела более профессионально, настроим имя модели.

Добавим метаданные:

class Movie(models.Model):
    title = models.CharField(max_length=255)
    description = models.TextField()
    year = models.PositiveIntegerField()

    class Meta:
        verbose_name = "Фильм"
        verbose_name_plural = "Фильмы"

    def __str__(self):
        return self.title

Теперь в админке вместо Movies будут:

  • Фильм
  • Фильмы

Обновите страницу /admin/ и проверьте.

Дополнение: что такое класс Meta и зачем он нужен

В Django каждая модель может содержать специальный вложенный класс Meta.

Он не хранит данные и не добавляет полей в таблицу — его задача описывать служебную (метаданную) информацию о модели, то есть правила, по которым Django должен работать с этой моделью.

Можно представить Meta как «файл настроек» для конкретной модели.

Что можно задавать в Meta

Наиболее распространённые параметры:

  • verbose_name / verbose_name_plural Красивые названия модели в админ-панели.

  • ordering Сортировка записей по умолчанию. Например:

    ordering = ['title']
  • db_table Явное указание имени таблицы в базе данных.

  • permissions Добавление пользовательских прав доступа.

  • unique_together / constraints Ограничения уникальности на уровне базы данных.

  • indexes Создание дополнительных индексов.

Пример

class Movie(models.Model):
    title = models.CharField(max_length=255)
    year = models.PositiveIntegerField()

    class Meta:
        verbose_name = "Фильм"
        verbose_name_plural = "Фильмы"
        ordering = ['-year']

Зачем это нужно

  • Для удобного отображения в админ-панели.
  • Для правильной сортировки данных по умолчанию.
  • Для соблюдения бизнес-правил.
  • Для оптимизации запросов.
  • Для контроля структуры базы данных.

Без класса Meta все эти настройки пришлось бы указывать вручную в разных местах — поэтому Django хранит их компактно внутри модели.


8. Переименование приложения

Когда есть много приложений, важно, чтобы их названия были читаемыми.

Откройте:

movies/apps.py

и измените:

from django.apps import AppConfig

class MoviesConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'movies'
    verbose_name = 'Фильмотека'

Теперь в админке блок будет называться Фильмотека.

Если после изменения видите ошибку:

AppRegistryNotReady: Apps aren't loaded yet.

→ Вы забыли перезапустить сервер.


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

Задание 1. Зарегистрировать новую модель

  1. Создайте новую модель Genre с одним полем name.
  2. Зарегистрируйте её в админке.
  3. Настройте ей verbose_name / verbose_name_plural.
  4. Проверьте, что модель отображается корректно.

Задание 2. Настроить отображение приложения

  1. Измените название приложения movies на «Каталог кино».
  2. Проверьте, что это название отображается в админ-панели.
  3. Попробуйте создать запись в новой модели Genre.

Задание 3. Проверить работу суперпользователя

  1. Создайте нового суперпользователя.
  2. Войдите под ним в админ-панель.
  3. Создайте 3 записи модели Movie.
  4. Выйдите и войдите снова под предыдущим пользователем.

Задание 4. Исправление частых ошибок

Смоделируйте ситуации:

  1. Удалите регистрацию модели из admin.py → Проверьте, исчезла ли модель.
  2. Удалите приложение movies из INSTALLED_APPS → Запустите сервер и разберите ошибку.
  3. Верните всё обратно.

Вопросы для закрепления

  1. Почему административная панель Django включена по умолчанию?
  2. Для чего нужен суперпользователь?
  3. Где находится маршрут к админ-панели и как его изменить?
  4. Что произойдёт, если модель не зарегистрировать в admin.py?
  5. Какие ошибки могут возникнуть, если забыть добавить приложение в INSTALLED_APPS?
  6. Зачем указывать verbose_name и verbose_name_plural?
  7. Что делает метод __str__() в модели?
  8. Где находится файл, отвечающий за название приложения?
  9. Можно ли изменить язык админ-панели без изменения LANGUAGE_CODE?
  10. Почему важно проверять изменения сразу в браузере?

Предыдущий урок | Следующий урок