Зарегистрируйтесь, чтобы продолжить обучение

Запрос-Ответ Python: Разработка на фреймворке Django

Как и любой серверный веб-фреймворк, Django построен вокруг HTTP. Он принимает запросы, на основе которых формирует и отдает HTTP-ответы. Django берет на себя всю грязную работу: разбор запроса, выбор правильного обработчика, отправку ответа клиенту. Программисту остается выполнить только самый необходимый минимум для добавления новых страниц на сайте.

В этом уроке разберемся, что и как нужно делать разработчику, чтобы добавить новые страницы на сайт.

Первая страница на Django

В этот минимум входят три вещи:

  • Маршрут. Определяет адрес конкретной страницы или набора страниц на сайте. Маршрут связывает эти адреса с конкретным обработчиком, который будет вызван при запросе этих страниц
  • Контроллер. Слой кода, в котором расположены обработчики страниц сайта. Они анализируют запрос и формируют ответ, который фреймворк отправляет пользователю
  • Шаблон. Специальный файл, который используется, чтобы формировать HTTP-ответ

Маршрут

Маршруты любого проекта на Django хранятся в файле urls.py. В нашем случае он находится по пути hexlet_django_blog/urls.py. Этот файл предназначен для описания маршрутов нашего сайта.

В этом файле находится переменная urlpatterns — список маршрутов нашего сайта. Изначально этот файл содержит только один маршрут, который соответствует разделу администратора admin/:

# hexlet_django_blog/urls.py
from django.contrib import admin
from django.urls import path

urlpatterns = [
    path('admin/', admin.site.urls),
]

Функция path(route, view) задает правило для обработки маршрута. Первым параметром она принимает адрес запрашиваемой страницы или паттерн, который описывает группу страниц. В коде выше это адрес раздела администратора.

Вторым параметром передается обработчик или встраиваемый urls.py другого приложения. Обработчики запросов в Django называют view — на жаргоне джангистов «вьюха».

Заменим стартовую страницу на собственную. Нам понадобится view и шаблон —template.

Для этого в файл urls.py добавим импорт вьюхи:

 from hexlet_django_blog import views

Далее добавим в список urlpatterns новое правило обработки адреса главной страницы:

urlpatterns = [
    path('', views.index), # <- добавляем эту строчку
    path('admin/', admin.site.urls),
]

Мы добавили правило, которое назначает обработчиком главной страницы или пустого пути вьюху views.index.

Контроллер

Теперь создадим файл hexlet_django_blog/views.py и запишем в него следующий код:

# hexlet_django_blog/views.py
from django.shortcuts import render

def index(request):
    return render(request, 'index.html', context={
        'who': 'World',
    })

Здесь мы используем функцию render. Она формирует HTML на основе указанного шаблона и использует при рендеринге (составлении страницы) данные из словаря context.

Шаблон

Теперь нам потребуется шаблон. Создадим директорию hexlet_django_blog/templates и файл index.html в ней. В файл запишем следующее:

<h1>Hello, {{ who }}!</h1>

Остается сделать небольшую настройку Django. Сначала нужно указать Django название директории, в котором будут находиться шаблоны. Для этого в модуле hexlet_django_blog/settings.py находим список TEMPLATES. Там в списке DIRS задаем значение BASE_DIR / 'templates':

# hexlet_django_blog/settings.py
TEMPLATES = [
    {
        ...
        'DIRS': [BASE_DIR / 'templates'],
        ...
    },
]

Теперь нам нужно в конец списка INSTALLED_APPS добавить строку 'hexlet_django_blog'. Так Django будет знать, что шаблоны и код у нас находятся в данном пакете:

# hexlet_django_blog/settings.py
INSTALLED_APPS = [
    ...
    'hexlet_django_blog', # <- добавляем эту строчку
]

Запустим сервер разработчика и откроем стартовую страницу. Там можно увидеть приветствие:

image_hello

Теперь создадим новую страницу /about. Для этого добавим маршрут, вью и шаблон:

Добавим в файл hexlet_django_blog/urls.py новый маршрут:

urlpatterns = [
    path('', views.index),
    path('about/', views.about), # <- добавляем эту строчку
    path('admin/', admin.site.urls),
]

Создадим новый обработчик about внутри hexlet_django_blog/views.py:

def about(request):
    return render(request, 'about.html')

Создадим шаблон hexlet_django_blog/templates/about.html и добавим туда следующий HTML:

<h1>О блоге</h1>
<p>Эксперименты с Django на Хекслете</p>

Если открыть страницу /about, то отобразится добавленная страница:

image_about

Выводы

Django сам выполняет множество действий: разбирает запросы, выбирает правильный обработчик, отправляет ответ клиенту. Однако он не может выполнить абсолютно всю работу. Поэтому программисту нужно сделать необходимый минимум. В этом уроке мы разобрались, как создавать маршруты и работать с их обработчиками и шаблонами, чтобы добавить новые страницы на сайте.


Самостоятельная работа

  1. Повторите все из теории урока на своем компьютере
  2. Зафиксируйте изменения в git

Дополнительные материалы

  1. URL dispatcher

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
Программирование на Python, Разработка веб-приложений и сервисов используя Django, проектирование и реализация REST API
10 месяцев
с нуля
Старт 26 декабря

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»