Языки программирования

Фреймворк Django: Создаем первое приложение

В этой статье мы продолжаем изучать фреймворк Django, а именно создадим свое первое приложение и выведем его в браузер используя отладочный веб-сервер.
Пустой проект не содержит никакой функциональности и поэтому в Django существует такое понятие как «Приложения».

Приложения

Приложение в Django – это web-приложение, которое предоставляет определенный функционал – например, web-блог, хранилище каких-то записей или простое приложение для голосования. Приложение может использоваться несколькими проектами.
Каждое приложение Django состоит из пакета Python, который следует некоторым соглашениям. Django содержит команду, которая создает структуру для нового приложения, что позволяет вам сосредоточиться на написании кода, а не на создании каталогов.
Для создания нового приложения остановим отладочный веб-сервер (если он включен). В командной строке проверим, находимся ли мы в папке проекта, и наберем команду:
manage.py startapp btest
Команда startapp утилиты manage.py запускает создание нового «пустого» приложения, чье имя указано после этой команды.

Утилита manage.py создала новый каталог и файлы:
  • migrations – папка вложенного пакета, в котором будут сохраняться модули сгенерированный Django миграций (в папке находится пустой файл __init__.py);
  • __init__.py – пустой файл, сигнализирующий языку Python, что это папка – пакет;
  • admin.py – модуль административных настроек и классов-редакторов;
  • apps.py – модуль с настройками приложения;
  • models.py – модуль с моделями;
  • tests.py – модель с тестирующими процедурами;
  • views.py – модуль с контроллерами.
Теперь зарегистрируем только что созданное приложение в проекте. Найдем в пакете конфигурации файл settings.py и отыщем следующий фрагмент кода:
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]
Список, хранящийся в переменной INSTALLED_APPS, перечисляет все приложения, зарегистрированные в проекте и участвующие в его работе.

Добавим в код наше приложение. Итоговый листинг:
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'btest.apps.BtestConfig',
]
Обратим внимание на три важных момента. Во-первых, элемент списка приложений должен представлять собой строку с путем к классу BtestConfig, описывающему конфигурацию приложения и объявленному в файле apps.py, что хранится в пакете приложения.
Во-вторых, этот путь указывается в том формате, в котором записываются пути к модулям в стандарте языка Python (т.е. разделяются точками).
В-третьих, этот путь указывается относительно папки проекта. После изменения кода сохраните и закройте файл settings.py.

Представления

Функция представления, или коротко представление – это функция Python, которая принимает web-запрос и возвращает web-ответ. Ответом может быть HTML-содержимое страницы, или перенаправление, или 404 ошибка, или XML-документ, или что угодно.
Давайте создадим свое первое представление. Откроем файл btest/views.py, удалим имеющийся там код и добавим следующий код:
from django.http import HttpResponse

def index(request):
    return HttpResponse("Привет, программист! Это твое первое приложение. Поздравляем!")
Наше представление – это, собственно функция index(). Единственное, что она делает, — отправляет пользователю текстовое сообщение.
Любая функция представления в качестве единственного обязательного параметра принимает экземпляр класса Httprequest, хранящий различные сведения о полученном запросе.
В теле функции мы создаём экземпляр класса HttpResponse (он объявлен в модуле django.http), который будет представлять отправляемый клиенту ответ.

Маршруты

Чтобы вызвать представление, нам нужно назначить его на какой-то URL через конфигурацию URL-ов.
Чтобы добавить настройки URL-ов в приложение, создадим файл urls.py в пакете этого приложения (т.е. в папке btest) и запишем в него код:
from django.urls import path
from .views import index

urlpatterns = [
    path('', index),
]
Пустая строка, переданная первым параметром в функцию path(), обозначает корень пути из маршрута предыдущего уровня вложенности (родительского). Сохраним и закроем файл urls.py.

Чтобы при наборе Интернет-адреса «http://localhost:8000/btest/» запускался только что написанная функция представления index(), нам нужно связать таковой с шаблонным адресом btest/.

Найдем в пакете конфигурации файл urls.py. Откроем файл и найдем код:
from django.contrib import admin
from django.urls import path

urlpatterns = [
    path('admin/', admin.site.urls),
]
В данном коде содержится список маршрутов, оформленный в виде обычного списка Python, и присваивается переменной urlpatterns.

Каждый элемент списка маршрутов (т.е. каждый маршрут) должен представляться в виде результата, возвращаемого функцией path() из модуля Django.urls.

Добавим в список новый маршрут. Листинг будет выглядеть так:
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('btest/', include('btest.urls')),
    path('admin/', admin.site.urls),
]
Вложенный список маршрутов, указываемый во втором параметре функции path(), должен представлять собой результат, возвращенный функцией include() из модуля django.urls.

Единственным параметром эта функция принимает строку с путем к модулю, где записан список маршрутов.

Сохраняем все файлы и запускам отладочный web-сервер.

Набрав в браузере строку «http://localhost:8000/btest/», мы попадем на страницу с нашим сообщением:
Если всё правильно сделали, тогда в браузере должно появится данное сообщение. Поздравляем! Вы создали своё первое приложение на Django.
Фреймворк Django