Подавляющее большинство веб-приложений имеют административную панель (админ панель, админка) управления контентом сайта. Как правило, админ-панель предназначена только для менеджеров и закрыта для посетителей сайта.
Разработчики Django включили в комплект фреймворка полнофункциональный интерфейс для администраторов и менеджеров сайта с двумя цветовыми темами. Сайт администратора Django активирован по умолчанию и при вводе веб-адреса вида host_name/admin (например, localhost:5000/admin) в браузер откроется страница входа в административное пространство веб-приложения.
Полную информацию по административному сайту можно получить из документации Django на официальном сайте, ссылка на последнюю стабильную версию настоящего момента Django documentation 4.2
Описываемое приложение использует базу данных MySQL и является продолжением развития исходного кода описанного на страницах: Приложение на фреймворке Django и Модели и миграции веб-приложения Django. Перед использованием сайта требуется создать базу данных с названием shop_electronics, файл sql-формата контента базы данных прилагается к архивному файлу исходника.
Командная строка может вызываться из разных папок, включенных в проект Visual Studio. Поскольку активированная виртуальная среда управляется из папки проекта студии, то вызов командной строки для различных команд выполнения, как правило, должен происходить из контекстного меню строки названия проекта студии пунктом Открыть командную строку здесь….
Для функционирования сайта администратора необходимо предварительно с помощью миграций создать определенные таблицы в базе данных. Сайт администратора Django использует несколько сопутствующих приложений admin, auth, sessions, поэтому команда миграций должна быть общая, для всех зарегистрированных приложений проекта: python manage.py migrate
После этого база данных заполнится соответствующими таблицами.
Для входа в сайт администратора первоначально необходимо создать суперпользователя (он же админ). Суперпользователь создается командой: python manage.py createsuperuser
После выполнения этой команды Django предложит ввести логин для администратора сайта, адрес электронной почты, и ввод пароля дважды. Например, для целей тестирования, введем такие данные: admin / add@post.tt / 123456
При разработке реального сайта, конечно же необходимо вводить существующий адрес электронной почты и пароль высокой надежности.
Django производит валидацию паролей, в данном случае вышло предупреждение о низкой надежности введенного пароля, но как видно из скриншота есть возможность проигнорировать валидацию. Так как исходник приложения electronics имеет файлы миграции с наполнением данными, можно легко очистить базу и повторить процедуры создания таблиц и суперпользователя любое количество раз.
Теперь можно открыть панель администратора используя созданные логин и пароль.
Разработчики Django проделали большую работу для пользователей фреймворка избавив их от утомительного написания и тщательной доводки панели администрирования веб-приложений. В административный сайт включены возможности аутентификации и авторизации пользователей и групп. После активации первого администратора-суперпользователя можно создавать группы и пользователей с различным уровнем прав для администрирования веб-приложения.
Суперпользователь может назначать любые права группам и включать пользователей в определенную группу административного сайта. Кроме этого, суперпользователь может наделять особыми правами любого пользователя админ-панели и назначать дополнительных суперпользователей с неограниченными правами.
Например, можно создать:
- группу менеджеров сайта с полномочиями добавления, редактирования и удаления товаров в базе данных.
- модераторов форума с правами редактирования и удаления записей участников форума.
- и любые другие группы и пользователей для эффективной работы сайта или интернет-магазина.
Административная панель Django позволяет редактировать таблицы данных созданных приложений, для этого надо совсем чуть-чуть программного кода. Например, для того чтобы сделать таблицы данных приложения electronics редактируемыми в админ панели надо зарегистрировать модели в модуле приложения admin.py:
from django.contrib import admin
from .models import TypeComponent, Component
# Register your models here.
admin.site.register(TypeComponent)
admin.site.register(Component)
По умолчанию названия моделей в админке выводятся как названия классов. Для изменения отображаемых названий моделей приложения (т. е. названия таблиц) и их атрибутов (т. е. названия столбцов таблиц) предназначены опции классов моделей verbose_name для отображения нового названия в единственном и verbose_name_plural - во множественном числе. Данные опции предназначены для повышения комфортности труда менеджеров-непрограммистов, работающих в панели администратора фреймворка Django.
Программный код моделей приложения electronics с мета-опциями, обеспечивающих вывод человеко-понятных названий вместо программно-технических:
from tabnanny import verbose
from django.db import models
# Общие поля для моделей приложения
class CommonFields(models.Model):
id = models.BigAutoField(primary_key=True, auto_created=True)
name = models.CharField(max_length=300, verbose_name="Название")
description = models.TextField(null=True, verbose_name="Описание")
# Данный класс не будет иметь таблицы в базе данных
class Meta:
abstract = True
# Типы электронных компонентов
class TypeComponent(CommonFields):
class Meta:
verbose_name = "Тип компонентов"
verbose_name_plural = "Типы компонентов"
# Электронный компонент
class Component(CommonFields):
# Определение значения свойства db_column="type_id" фиксирует название
# поля (столбца) для внешнего ключа.
# По умолчанию имя столбца определяется атрибутом класса + постфикс _id,
# т.е. без определения db_column название столбца было бы type_foreignkey_id.
# Различность названия атрибута модели и названия столбца созданы
# для демонстрации ручного определения названия столбца.
type_foreignkey = models.ForeignKey(
"TypeComponent", db_column="type_id", on_delete=models.CASCADE
)
price = models.IntegerField()
class Meta:
verbose_name = "Компонент"
verbose_name_plural = "Компоненты"
По умолчанию время в фреймворке Django исчисляется как UTC (всемирное координированное время, по которому общество планеты Земля регулирует часы и время). Данное значение хранится в константе TIME_ZONE модуля настроек проекта settings.py.
При входе в админку Django, например, на страницу пользователя, в разделе «Важные даты» можно заметить отличие времени последнего входа от вашего часового пояса. Если вам необходимо точное соответствие времени вашему часовому поясу, то в константе TIME_ZONE укажите свой часовой пояс. Список идентификаторов часовых поясов можно посмотреть в википедии List of tz database time zones.
Для процедур корректировки времени в конфигурационном файле settings.py имеется еще одна константа USE_TZ. При назначении данной константе значения USE_TZ = False время с поправкой часового пояса будет сохраняться в базе данных. Если константе назначено USE_TZ = True, время в базе данных будет сохраняться как UTC и корректироваться при выводе на веб-страницу согласно установленной TIME_ZONE. В Django версии 4.2 и последующих версиях по умолчанию будет устанавливаться USE_TZ = True.
Архивный файл включает виртуальную среду Python, установленный драйвер mysqlclient, приложение простого интернет-магазина electronics. Исходник написан в среде Visual Studio 2022.
Требуемая версия базового интерпретатора Python от 3.8 до последних 3.9. Нижнюю версию определяет фреймворк Django v4.2, верхнюю версию интерпретатора определяет пакет mysqlclient (на момент написания статьи не выпущена версия для Python 3.10 и выше).
Для успешного запуска проекта необходимо в файле pyvenv.cfg виртуальной среды прописать версию и путь до вашего базового интерпретатора, например:
home = G:\MyProjects\Programming\Pythons\Python39_4
include-system-site-packages = false
version = 3.9.4
Перед началом работ с административной панелью создайте базу данных MySQL с названием shop_electronics и выполните импорт sql-файла с таблицами (прилагается к исходнику.)