Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Приложения Python: Разработка на фреймворке Django

Любой Web-проект достаточно быстро перестаёт "помещаться" в рамках одного пакета: становится слишком много views и urlpatterns. Чтобы контролировать процесс роста, мы можем использовать стандартный для Python приём декомпозиции — превращение модуля в пакет с подмодулями.

В случае views.py это даже сработает, но вот разделить на части правила роутинга (те самые элементы списка urlpatterns в urls.py) будет уже сложновато: нам придётся вручную собирать список правил из отдельных кусочков.

Однако Django на то и фреймворк, чтобы нам не приходилось придумывать свои способы управления сложностью. В Django уже есть готовый паттерн: приложения (applications).

Каждое приложение представляет из себя пакет с модулями, включающий в себя модуль описания моделей (о них расскажет один из последующих уроков) и вьюх, а также часто имеет свои шаблоны и свои же urlpatterns. Приложения часто выглядят как миниатюрные, но самостоятельные Web-приложения (отсюда и название). Именно эта самостоятельность помогает реализовывать переиспользуемые приложения, решающие типовые задачи. Сам фреймворк Django предоставляет приличный набор таких вот приложений-кирпичиков, помогающих быстро заложить фундамент проекта.

Создаём первое приложение

На самом деле у нас уже есть одно! Это тот самый пакет hello_django. Самый первый пакет, который вы создаёте, запуская django-admin startproject, может и не быть приложением сам по себе. Его задача, по сути, заключается в описании точки входа в Web-приложение: в этом пакете задаются настройки всего приложения и корневые urlpatterns.

Именно приложением в терминологии Django пакет hello_django мы сделали, когда добавили его в settings.INSTALLED_APPS.

Этот список содержит перечень всех Django applications, подключенных к текущему проекту. Многие механизмы фреймворка обращаются к этому перечню во время своей работы. Так встроенный загрузчик шаблонов (Template Loader) ищет их в поддиректориях с именем "templates" во всех подключенных приложениях. Именно для этого мы подключили hello_django в роли приложения — чтобы загрузчик шаблонов нашёл наш первый шаблон!

Но давайте же создадим, наконец, новое приложение! Для этого вам нужно будет перейти в директорию пакета hello_django и выполнить django-admin startapp calc. В результате будет создано приложение следующего вида (вид с точки зрения корня проекта):

tree hello_django/calc

hello_django/calc
├── admin.py
├── apps.py
├── __init__.py
├── migrations
│   └── __init__.py
├── models.py
├── tests.py
└── views.py

Здесь модуль models.py и пакет migrations относятся к слою хранения и пока нас не интересуют. tests.py описывает тесты, admin.py описывает админку — на это мы тоже пока внимание не заостряем. А вот views.py нам пригодится!

Для окончания создания "болванки" приложения нам остаётся задать его имя в файле apps.py и подключить его в settings.INSTALLED_APPS. Для этого, в качестве имени, мы указываем полный путь к приложению:

# hello_django/calc/apps.py
class CalcConfig(AppConfig):
    ...
    name = 'hello_django.calc'  # <- изменяем эту строчку

и добавляем имя приложения в список:

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

Всё, приложение создано и подключено!

Добавляем маршрутизацию

По-умолчанию в приложении не генерируется модуль urls.py, потому что приложение может и не быть настолько большим, чтобы потребовался отдельный набор правил маршрутизации. Такие небольшие приложения "прописывают" в urls.py уровнем выше. Но мы будем делать "большое" приложение, поэтому смело создавайте файл hello_django/calc/urls.py следующего вида:

from django.urls import path

from hello_django.calc import views

urlpatterns = [
    path('', views.index),
]

Да, пока всё максимально похоже на корневой urls.py: мы опять связали пустой путь с вьюхой views.index, но уже из этого приложения.

Теперь нужно связать urlpatterns приложения с urlpatterns проекта. Модифицируем hello_django/urls.py:

from django.urls import path, include  # <- добавлен include

from hello_django import views

urlpatterns = [
    path('', views.index),
    path('calc/', include('hello_django.calc.urls')),  # <- новая строчка
    # path('admin/', admin.site.urls),
]

С этого момента все пути, начинающиеся с "calc/", будут перенаправляться в hello_django.calc.urls. В приложении у нас уже приписана view index, связанная с путём '', что означает: запрос по пути calc/ без каких либо продолжений будет направлен в hello_django.calc.views.index.

Только что мы произвели встраивание приложения в проект по префиксу пути: переиспользуемые приложения обычно встраиваются именно таким образом. Как вы, возможно, заметили, префикс calc/ задаётся вне встраиваемого приложения, поэтому приложение может быть встроено в любой проект по любому префиксу. И правила маршрутизации этого приложения не будут конфликтовать с правилами проекта и других приложений!

Реализуем view

View у нас прописана в правилах маршрутизации. Реализуем её:

# hello_django/calc/views.py
from django.http import HttpResponse


def index(request):
    return HttpResponse('calc')

Если теперь открыть в браузере адрес localhost:8000/calc/, то вы увидите текст "calc".

Здесь view возвращает HttpResponse с указанным телом ответа, вместо того чтобы использовать шаблон. В модуле django.http вы найдёте JsonResponse, позволяющий возвращать данные в виде JSON и FileResponse, нужный для отправки клиенту файлов.


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

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

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

Ошибки, сложный материал, вопросы >
Нашли опечатку или неточность?

Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.

Что-то не получается или материал кажется сложным?

Загляните в раздел «Обсуждение»:

  • задайте вопрос. Вы быстрее справитесь с трудностями и прокачаете навык постановки правильных вопросов, что пригодится и в учёбе, и в работе программистом;
  • расскажите о своих впечатлениях. Если курс слишком сложный, подробный отзыв поможет нам сделать его лучше;
  • изучите вопросы других учеников и ответы на них. Это база знаний, которой можно и нужно пользоваться.

Об обучении на Хекслете

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

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

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

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

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

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

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

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Python-разработчик
Профессия
Разработка веб-приложений на Django
25 мая 10 месяцев

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

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

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

Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»