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

Быстрый старт с Django Python: Разработка на фреймворке Django

В рамках курса мы создадим и будем расширять простой Django-проект "hello-django". Рекомендую вам повторять все описанные шаги, а при желании — и экспериментировать над проектом самостоятельно.

Разрабатывать проекты на Django следует с применением виртуальных окружений. Для простых проектов без зависимостей ещё можно обойтись глобальным интерпретатором, но Web-приложения стоит сразу обособить.

Вы можете создать директорию под проект, а затем в ней завести виртуальное окружение вручную. Либо используйте один из инструментов, автоматизирующих этот процесс. Мы в Хекслете рекомендуем использовать poetry.

Устанавливаем django

Итак, директория под проект создана, как и виртуальное окружение. Теперь нужно установить сам Django. Также нам понадобится WSGI-сервер (про WSGI рассказывалось в курсе по Flask), так как мы будем запускать проект в "приближенном к боевому режиме". Установите пакеты django и gunicorn.

Если вы используете poetry, то добавьте django, как обычную зависимость, а gunicorn, как --dev-зависимость.

После установки обоих пакетов вам должны стать доступны команды

  • django-admin — команда для работы с Django-проектами,
  • gunicorn — команда для запуска WSGI-сервера Gunicorn.

В "ручном" окружении команды доступны после его активации. В случае poetry нужно вызывать команды с помощью poetry run: poetry run django-admin version и всё остальное в том же духе.

Проверим версию Django (нам подходит любая 3.0.0+):

django-admin version

3.0.4

Генерируем "болванку" проекта

Выполните команду django-admin startproject hello_django .

Имя "hello_django" будет именем Python-пакета, поэтому содержит подчёркивание в качестве разделителя.

"Точка" в команде означает, что генерируемое содержимое проекта будет расположено в текущей директории. У нас уже есть директория проекта, поэтому нам не нужен лишний уровень вложенности.

У вас должна получиться следующая структура:

tree .

.
├── hello_django
│   ├── asgi.py
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── manage.py

Приведу краткое описание каждого файла:

  • manage.py — скрипт, используемый в процессе разработки для выполнения различных действий над проектом;
  • wsgi.py и asgi.py — точки входа в WSGI- и ASGI-приложения;
  • settings.py — модуль, содержащий все настройки проекта;
  • urls.py — модуль, описывающий правила маршрутизации запросов.

В процессе работы над проектом модифицировать нам предстоит лишь два модуля: settings.py и urls.py. Если вы заглянете в первый, то увидите конфигурацию по умолчанию: не пугайтесь её размера, просто ощутите, насколько много всего можно настроить в большом фреймворке!

Первая "вьюха", первый шаблон

Подробнее про архитектуру Django я расскажу позже. Сейчас же мы просто сделаем так, чтобы сервер показывал заглавную HTML-страницу. Для этого нам понадобится view-функция (на жаргоне джангистов "вьюха") и шаблон (template).

Отредактируйте файл hello_django/urls.py: добавьте импорт

from hello_django import views

и сделайте так, чтобы список urlpatterns выглядел следующим образом:

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

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

Правило подключения админки я пока закомментировал. До неё мы ещё доберёмся.

Создайте файл hello_django/views.py и запишите в него следующий код:

from django.shortcuts import render


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

Здесь я использую одну из функций, позволяющих "просто сделать хорошо" — render. Она формирует HTML на основе указанного шаблона, используя при "рендеринге" данные из словаря context.

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

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

Тут {{ who }} означает подстановку значения из контекста.

Остаётся только подсказать Django, что шаблоны нужно искать и в пакете hello_django. Для этого добавляем строку "hello_django" в конец списка INSTALLED_APPS в модуле hello_django.settings.

Запускаем приложение

Для запуска сервера разработчика нужно выполнить команду ./manage.py runserver (или python manage.py runserver).

В случае poetry команда будет выглядеть так: poetry run python manage.py runserver.

Этой командой вы запускаете встроенный в Django сервер, который работает в однопоточном режиме (что упрощает отладку) и сам перезапускается, если вы меняете что-то в коде. Кроме того, этот сервер никогда и ничего не кэширует — это важно при редактировании шаблонов и статических файлов (JS, CSS).

При всех удобствах во время разработки dev-сервер совершенно не годится для запуска "в боевых условиях" (в силу той же однопоточности), поэтому Django позволяет себя запускать и в роли WSGI-приложения (а с недавнего времени и в роли модно-асинхронного ASGI-приложения).

Чтобы запустить приложение с помощью Gunicorn, выполните команды

export DJANGO_SETTINGS_MODULE=hello_django.settings
gunicorn hello_django.wsgi

В случае poetry перед gunicorn будет привычный poetry run.

В этот раз нам пришлось указать с помощью переменной окружения модуль, содержащий настройки проекта. Указывая разные модули настройки мы можем запускать приложение в разных режимах.

Как вы могли заметить, manage.py не используется при запуске на WSGI-сервере. Этот скрипт используется преимущественно на машине разработчика. Зато при запуске manage.py можно не определять переменную окружения DJANGO_SETTINGS_MODULE, так как скрипт сам подставляет значение этой переменной при запуске ядра Django.


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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