Класс AdminSite
Класс AdminSite представляет собой центральный объект административного интерфейса Django. Он используется для регистрации моделей и настройки представлений панели администратора. По умолчанию Django создает экземпляр этого класса с именем site, который доступен через модуль django.contrib.admin. Вы можете создать собственный подкласс AdminSite, чтобы изменить внешний вид, добавить пользовательские представления или настроить поведение административной панели.
Синтаксис
from django.contrib.admin import AdminSite
class MyAdminSite(AdminSite):
# настройка атрибутов и методов
pass
Для создания собственного экземпляра административного сайта необходимо наследоваться от класса AdminSite и переопределить нужные атрибуты или методы. Затем экземпляр этого класса регистрируется в URL-конфигурации проекта.
Атрибуты класса
Класс AdminSite имеет несколько атрибутов, которые позволяют настраивать внешний вид и поведение административной панели:
-
site_header- заголовок, отображаемый в верхней части страницы (по умолчанию "Django administration") -
site_title- название, отображаемое в заголовке окна браузера (по умолчанию "Django site admin") -
index_title- заголовок, отображаемый на главной странице административного интерфейса (по умолчанию "Site administration") -
site_url- URL главной страницы сайта, отображаемый в верхней части панели (по умолчанию "/") -
login_template- шаблон для страницы входа в административную панель -
logout_template- шаблон для страницы выхода из административной панели
Пример . Настройка заголовков
Создадим собственный административный сайт с кастомными заголовками:
from django.contrib.admin import AdminSite
class MyAdminSite(AdminSite):
site_header = "Панель управления"
site_title = "Админка моего сайта"
index_title = "Добро пожаловать в панель управления"
Методы класса
Класс AdminSite предоставляет несколько ключевых методов:
-
register- регистрирует модель в административном интерфейсе -
unregister- удаляет модель из административного интерфейса -
get_urls- возвращает список URL-адресов для административного интерфейса -
get_app_list- возвращает список приложений для главной страницы -
has_permission- проверяет наличие прав доступа у пользователя
Пример . Регистрация модели
Зарегистрируем модель Article в собственном административном сайте:
from django.contrib.admin import AdminSite
from myapp.models import Article
class MyAdminSite(AdminSite):
site_header = "Моя панель управления"
site = MyAdminSite()
site.register(Article)
Пример . Регистрация модели с ModelAdmin
Зарегистрируем модель Article с настройками ModelAdmin:
from django.contrib.admin import AdminSite
from django.contrib.admin import ModelAdmin
from myapp.models import Article
class ArticleAdmin(ModelAdmin):
list_display = ("title", "status", "created_at")
list_filter = ("status",)
search_fields = ("title",)
class MyAdminSite(AdminSite):
site_header = "Моя панель управления"
site = MyAdminSite()
site.register(Article, ArticleAdmin)
Пример . Использование в проекте
Для использования собственного административного сайта в проекте необходимо заменить стандартный сайт в urls.py:
from django.contrib import admin
from django.urls import path
from myadmin import site
urlpatterns = [
path("admin/", site.urls),
]
Пример . Переопределение метода has_permission
Переопределим метод has_permission для ограничения доступа:
from django.contrib.admin import AdminSite
class MyAdminSite(AdminSite):
site_header = "Моя панель управления"
def has_permission(self, request):
# разрешаем доступ только суперпользователям
return request.user.is_superuser
Смотрите также
-
метод
register,
который регистрирует модель в административном интерфейсе -
декоратор
admin.register,
который упрощает регистрацию моделей -
класс
ModelAdmin,
который настраивает отображение модели в административной панели -
метод
unregister,
который удаляет модель из административного интерфейса