Содержание
Глава 4
Для некоторых веб-сайтов панель администратора является необходимой частью функциональности. Это веб-интерфейс, доступ к которому ограничен только для доверенных лиц — администраторов сайта, который позволяет добавлять, редактировать и удалять содержимое сайта. Самые распространённые примеры — интерфейс, через который добавляются посты в блог, панели управления комментариями, утилиты, которые позволяют посетителям обновлять их сообщения на сайте.
Однако, с подобными панелями связано несколько проблем: их создание очень скучный процесс. Веб-разработка интересна, когда вы создаёте что-то для общего доступа, но создание панели администрирования сайтом — всегда один и тот же процесс. Вам требуется авторизовать пользователей, отобразить и обработать какие-то формы, проверить вводимые данные и так далее. Это скучно, и вам приходится повторять одно и то же каждый раз.
Какой подход у Django к таким задачам? Django всё делает за вас — от вас потребуется лишь написать несколько строк. С Django создание такой панели — уже решённая задача.
В этой главе мы рассмотрим панель управления Djnago. Django считывает данные в ваших моделях, и предоставляет отличный веб-интерфейс для управления, который администраторы могут начинать использовать немедленно. В этой главе мы рассмотрим как его активировать, использовать и настраивать.
Мы рекомендуем вам прочитать эту главу в любом случае, даже если вы не намереваетесь использовать родную панель управления Django, так как тут мы мы рассмотрим несколько новых концепций, которые касаются всего Django-сайта.
Пакеты django.contrib
Панель управления в Django — часть большого набора функциональности, которая называется django.contrib — это часть кода Django, которая включает в себя различные полезные расширения для фреймворка. Вы можете представлять себе django.contrib как аналог стандартной библиотеки Python — общая, хотя и необязательная для использования, реализация некоторых распространённых действий. Она включена в Django по умолчанию, поэтому вы можете не заниматься изобретением велосипеда для ваших приложений.
Панель управления администратора является первой частью набора django.contrib, которую мы рассмотрим в этой книге. Технически она называется django.contrib.admin. Другие возможности django.contrib — это система авторизации пользователей (django.contrib.auth), поддержка анонимных сессий (django.contrib.sessions) и даже система комментариев (django.contrib.comments). Вы узнаете ещё больше возможностей django.contrib, когда ближе познакомитесь с Django, а некоторые мы рассмотрим далее в нашей книге. Пока что — просто запомните, что Django устанавливается с множеством полезных расширений, а django.contrib — место их обитания.
Активация панели администратора
Панель управления Django совершенно необязательна к использованию, так как не все сайты нуждаются в ней. Поэтому — она отключена по умолчанию, и вам необходимо выполнить несколько действий, что бы включить её.
Для начала — отредактируйте ваш файл settings.py:
- Добавьте
'django.contrib.admin'к спискуINSTALLED_APPS(порядок вINSTALLED_APPSне имеет значения, но предпочтительно хранить его в алфавитном порядке, что бы упростить чтение); - Убедитесь, что в
INSTALLED_APPSвключены'django.contrib.auth','django.contrib.contenttypes','django.contrib.messages'и'django.contrib.sessions'. Панель управления Django требует наличия этих трёх модулей. - Убедитесь, что
MIDDLEWARE_CLASSESсдержит:'django.middleware.common.CommonMiddleware','django.contrib.messages.middleware.MessageMiddleware','django.contrib.sessions.middleware.SessionMiddleware'и'django.contrib.auth.middleware.AuthenticationMiddleware'.
В результате у вас должен получиться такой набор настроек:
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
# 'django.contrib.sites',
'django.contrib.messages',
# 'django.contrib.staticfiles',
# Uncomment the next line to enable the admin:
# 'django.contrib.admin',
# Uncomment the next line to enable admin documentation:
# 'django.contrib.admindocs',
'books',
'django.contrib.admin',
)
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
)
Далее, запустите python manage.py syncdb. Это действие создаст несколько дополнительных таблиц в базе данных, которые используются панелью управления. При первом выполнении syncdb с добавленным в INSTALLED_APPS модулем 'django.contrib.auth' вам будет предложено создать суперпользователя сайта. Если вы не сделаете это сейчас — вы можете добавить его позже, выполнив python manage.py createsuperuser. Иначе — вы не сможете авторизоваться в панели управления:
$ python manage.py syncdb Creating tables ... Creating table auth_permission Creating table auth_group_permissions Creating table auth_group Creating table auth_user_user_permissions Creating table auth_user_groups Creating table auth_user Creating table auth_message Creating table django_content_type Creating table django_session Creating table django_admin_log You just installed Django's auth system, which means you don't have any superusers defined. Would you like to create one now? (yes/no): yes Username (Leave blank to use 'setevoy'): E-mail address: [email protected] Password: Password (again): Superuser created successfully. Installing custom SQL ... Installing indexes ... No fixtures found.
Третье — добавьте URL для панели управления в ваш URLconf (файл urls.py, как вы помните). По умолчанию файл urls.py, сгенерированный при выполнении django-admin.py startproject содержит закомментированный код для панели управления Djnago, и вам надо только убрать комментарии. В результате у вас должно получиться что-то вроде следующего:
...
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
...
url(r'^admin/', include(admin.site.urls)),
)
Теперь вы можете увидеть панель управления в работе. Запустите сервер разработки python manage.py runserver, и откройте страницу http://127.0.0.1:8000/admin/ в браузере:
Продолжение — Django book: использование панели управления.





