Содержание
Глава 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: использование панели управления.