В терминологии Django приложение – отдельный функциональный блок, входящий в состав сайта. Решение о выделении части сайты в отдельное приложение принимает разработчик. Такое приложение может реализовать отдельный раздел интернет-ресурса или подсистему (регистрация пользователя, добавление объявления и т.п.).
Приложение представляется стандартным пакетом Python, который содержит модули с программным кодом. Находится пакет в каталоге проекта – там, где находится пакет конфигурации. При этом имя пакета становится именем нового приложения.
Далее в качестве примера будет приведен алгоритм создания нового приложения bboard , которое обеспечит вывод объявлений, оставленных пользователями.
Если запущен отладочный веб-сервер, его необходимо остановить. Далее нужно убедиться, что вы находитесь в каталоге проекта, после чего выполнить команду:
manage.py startapp bboard
Данная команда утилиты manage.py инициирует создание стандартного шаблона нового (пустого) приложения с именем, указанным в команде.
Рассмотрим, какие файлы создаются при создании приложения. Прежде всего, это новый каталог bboard, расположенный в папке текущего проекта. В нем расположены следующие файлы:
- migrations – папка для хранения файлов миграции. Изначально в каталоге находится только стандартный файл __init__.py (пустой), указывающий, что это полноценный пакет Python.
- admin.py – модуль классов-редакторов и основных административных настроек;
- models.py – модуль для моделей проекта;
- apps.py – настройки приложения;
- tests.py – модуль, предназначенный для хранения различных тестов.
После создания приложения его необходимо зарегистрировать в проекте. Для этого нужно в пакете конфигурации найти файл настроек settings.py, открыть его для редактирования (в используемой среде программирования или обычном текстовом редакторе). Далее необходимо найти переменную INSALLED_APPS, в которой хранятся все приложения текущего проекта. По умолчанию данная секция выглядит следующим образом:
INSTALLED_APPS = [
‘django.contrib.admin’,
‘django.contrib.auth’,
‘django.contrib.contenttypes’,
‘django.contrib.sessions’,
‘django.contrib.messages’,
‘django.contrib.staticfiles’,
]
Присутствуют только стандартные инструменты, реализующие необходимые подсистемы фреймворка. К примеру, приложение django.contrib.sessions представляет собой подсистему для обслуживания серверных сессий, а приложение django.contrib.auth – обеспечивает разграничение доступа.
В данный список и нужно добавить созданное приложение:
INSTALLED_APPS = [
. . .
‘bboard.apps.BboardConfig’,
]
Мы добавили строку с путем к классу BboardConfig, в котором описана конфигурация приложения.
После сохранения файла можно сразу попробовать написать первый контролер.
Контролеры
Контролер Django – это код, который активируется при обращении к определенному интернет-адресу (или шаблону URL), выводя в ответ соответствующий контент. Стоит отметить, что в официальной документации обычно используется другой термин – view (представление или вид).
Контроллер Django может быть реализован как функция (обозначают как контроллер-функция) либо как класс (контроллер-класс). Первый вариант более универсален, но их сложнее программировать, во втором случае используется гораздо меньше кода, поэтому такие контролеры удобно использовать для реализации типовых задач (например, вывод определенных товаров).
Изначально для хранения кода контролеров предназначен файл views.py, который автоматически создается в каждом приложении. Однако контролеры можно поместить и в другие модули.
Для примера создадим простой контролер, который будет просто выводить текст на странице. Необходимо открыть файл views.py, удалить код по умолчанию и добавить следующий код:
From django.http import HttpResponse
def index(request):
return HttpResponse(«Пример вывода текста на страницу»)
Созданный контролер – функция index(), которая выполняет только вывод текста на страницу.
Контроллер-функция имеет обязательный параметр – экземпляр класса HttpRequest, в котором хранится информация о запросе: служебная информация от браузера, запрошенный интернет-адрес, данные, полученные от пользователя и пр. Данный параметр принято обозначать как request, в нашем примере он никак не используется.
В теле функции инициируется создание класса HttpResponse (модуль django.http), который обеспечивает передачу ответа. Содержимое ответа (в нашем случае просто текст) является единственным параметром конструктора класса.
Для просмотра результата необходимо также реализовать связь набранного в браузере интернет адреса с контролером (описано в следующей статье)