Подключение админ-панели. Регистрация моделей

Курс по Django: https://stepik.org/a/183363

Архив проекта: 37_sitewomen.zip

На данный момент мы с вами познакомились с тремя важнейшими компонентами фреймворка Django – это модели (models), шаблоны (templates) и представления (views). Также научились определять маршруты для страниц нашего сайта. Пришло время сделать следующий шаг и затронуть один из ключевых элементов фреймворка Django – работу со встроенной админ-панелью. Если мы посмотрим в файл конфигурации settings.py, то в коллекции INSTALLED_APPS увидим подключение админки к нашему сайту. А в файле urls.py маршрут для обращения к админ-панели. Давайте перейдем по нему:

http://127.0.0.1:8000/admin/

Видим, что фреймворк по умолчанию использует английский язык. Чтобы переключиться на русскую локализацию, нужно в пакете конфигурации в файле settings.py изменить константу LANGUAGE_CODE, установив ее в значение:

LANGUAGE_CODE = 'ru-RU'

И при обновлении страницы увидим русскоязычный вариант админ-панели.

С помощью встроенной админки можно решать практически все типовые задачи, которые нам могут потребоваться. Это и создание пользователей с разными полномочиями (ролями), отображение всех наших приложений, добавление, удаление и изменение записей и так далее. Она подойдет для большинства сайтов так, что создавать свою админ-панель в Django попросту нет необходимости.

Итак, для входа нам нужно ввести имя пользователя и пароль. Но у нас пока их нет и вообще нет ни одного зарегистрированного пользователя в админ-панели. Поэтому, сначала необходимо создать суперпользователя – администратора сайта. Для этого я перейду в терминал и в новой вкладке консоли выполню команду (из каталога проекта sitewomen):

python manage.py createsuperuser

Здесь нам будет предложено указать логин (имя пользователя). В учебных целях я укажу root. Далее, нужно ввести адрес электронной почты, пусть это будет root@mymail.ru. (Почта может быть не существующей в учебном проекте, а вообще, нужно указывать адрес реальной почты, на которую будут приходить и отправляться служебные сообщения). И, наконец, вводим пароль (1234) и повторяем его. Конечно, такой простой пароль и имя пользователя я использую сугубо в рамках этих занятий. В реальности старайтесь указывать необычные, уникальные имена и большой, сложный пароль, иначе, получив доступ к админ-панели, злоумышленник легко нарушит работу вашего сайта.

Все, суперпользователь создан и мы теперь можем войти в админку, указав root и пароль 1234. На главной странице мы видим два зарегистрированных приложения: «Группы» и «Пользователи». То есть, мы можем создавать новых пользователей уже непосредственно здесь, а также назначать им определенные группы.

Однако здесь нет нашего приложения women. Почему? Дело в том, что его нужно зарегистрировать, то есть, указать, что мы хотим его видеть в админ-панели. Для этого откроем файл women/admin.py, который отвечает за взаимосвязь приложения с админкой, где мы будем регистрировать наши модели. Вначале импортируем их:

from .models import Women

и зарегистрируем модель Women:

admin.site.register(Women)

Возвращаемся в админку и при обновлении главной страницы видим наше приложение и зарегистрированную модель Women. Если щелкнуть по ней, то видим список наших записей и здесь же можем их редактировать, удалять и добавлять новые. Причем каждое поле отображается своим виджетом. Это очень удобно.

И, смотрите, при выборе определенной записи, мы видим кнопку «Смотреть на сайте». Эта кнопка появляется только тогда, когда в модели определена функция get_absolute_url(). Если мы ее закомментируем и обновим админку, то эта кнопка пропадет. Так, что эта функция достаточно часто используется в различных модулях фреймворка Django.

Давайте немного настроим админ-панель, чтобы она выглядела приятнее и дружелюбнее. Первое, что мы сделаем – это заменим заголовок админки на наше собственное. Для этого перейдем в файл urls.py пакета конфигурации и через объект admin.site переопределим атрибут site_header следующим образом:

admin.site.site_header = "Панель администрирования"

После обновления страницы админ-панели видим этот новый заголовок.

Чтобы поменять второй заголовок, следует переопределить атрибут index_title:

admin.site.index_title = "Известные женщины мира"

Далее, заменим отображение модели Women на «Известные женщины». Для этого перейдем в файл с моделями (women/models.py) и в классе Women пропишем специальный вложенный класс Meta, который используется админкой для более тонкой настройки модели:

class Women(models.Model):
...
    class Meta:
        verbose_name = 'Известные женщины'

Здесь verbose_name – это специальный атрибут, отвечающий за название модели. Однако мы видим, что админ-панель по прежнему добавляет латинскую s в конец нашего имени, то есть, пытается сделать его множественное число. Чтобы явно указать, как будет звучать название во множественном числе, определим еще один атрибут:

    class Meta:
        verbose_name = 'Известные женщины'
        verbose_name_plural = 'Известные женщины'

Наконец, поменяем отображение заголовка women приложения на другой: «Женщины мира». Для этого перейдем в файл women/apps.py и в классе конфигурации приложения пропишем атрибут:

class WomenConfig(AppConfig):
    name = 'women'
    verbose_name = 'Женщины мира'

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

Курс по Django: https://stepik.org/a/183363

Видео по теме