В рамках курса мы создадим и будем расширять простой 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 и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.
Загляните в раздел «Обсуждение»:
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.
Наши выпускники работают в компаниях:
С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.
Зарегистрируйтесь или войдите в свой аккаунт