Создание первого приложения Django, часть 1
Давайте учиться на примере.
В этом руководстве мы покажем, как создать простое приложение для голосования.
Оно будет состоять из двух частей:
- Публичный сайт, на котором пользователи смогут просматривать опросы и голосовать.
- Сайт администратора, на котором можно добавлять, изменять и удалять опросы.
Предполагается, что вы уже установили Django. Чтобы узнать, установлен ли Django и какая версия используется, выполните в командной строке следующую команду (префикс $ обозначает приглашение оболочки):
$ python -m django --version
...\> py -m django --version
Если Django установлен, вы увидите версию установленного пакета. Если Django не установлен, появится ошибка «No module named django».
Это руководство написано для Django 6.0, который поддерживает Python 3.12 и более поздние версии. Если версия Django не совпадает, воспользуйтесь переключателем версий в правом нижнем углу страницы, чтобы открыть руководство для вашей версии Django, или обновите Django до последней версии. Если вы используете более старую версию Python, ознакомьтесь с разделом Какую версию Python можно использовать с Django?, чтобы найти совместимую версию Django.
Где получить помощь:
Если у вас возникли трудности при прохождении этого руководства, перейдите в раздел Получение помощи в часто задаваемых вопросах.
Создание проекта
Если вы впервые используете Django, сначала необходимо выполнить первоначальную настройку. В частности, нужно автоматически сгенерировать код, который создаст проект Django — набор настроек для экземпляра Django, включая конфигурацию базы данных, параметры Django и настройки приложений.
В командной строке cd перейдите в каталог, в котором вы хотите хранить код, и выполните следующую команду, чтобы создать новый проект Django:
$ django-admin startproject mysite djangotutorial
...\> django-admin startproject mysite djangotutorial
В результате будет создан каталог djangotutorial, внутри которого находится проект с именем mysite. Для Django имя каталога не имеет значения; вы можете переименовать его как угодно. Если команда не сработала, см. раздел Проблемы при запуске django-admin.
Примечание
Не называйте проекты в честь встроенных компонентов Python или Django. В частности, избегайте таких имён, как django (это приведёт к конфликту с самим Django) или test (это имя уже занято встроенным пакетом Python).
Посмотрим, что создала команда startproject:
djangotutorial/
manage.py
mysite/
__init__.py
settings.py
urls.py
asgi.py
wsgi.py
Эти файлы:
-
manage.py: Утилита командной строки, которая позволяет по-разному взаимодействовать с этим проектом Django. Все подробности оmanage.pyприведены в разделе django-admin и manage.py. -
mysite/: Каталог, содержащий собственно пакет Python вашего проекта. Его имя — это имя пакета Python, которое понадобится для импорта объектов из него (например,mysite.urls). -
mysite/__init__.py: Пустой файл, указывающий Python, что этот каталог следует считать пакетом Python. Если вы только начинаете изучать Python, прочитайте подробнее о пакетах в официальной документации Python. -
mysite/settings.py: Настройки и конфигурация этого проекта Django. В разделе Настройки Django подробно описано, как они работают. -
mysite/urls.py: Объявления URL-адресов этого проекта Django — «оглавление» сайта на Django. Подробнее об URL-адресах читайте в разделе Диспетчер URL-адресов. -
mysite/asgi.py: Точка входа для веб-серверов, совместимых с ASGI, которые обслуживают ваш проект. Подробнее см. в разделе Развёртывание с помощью ASGI. -
mysite/wsgi.py: Точка входа для веб-серверов, совместимых с WSGI, которые обслуживают ваш проект. Подробнее см. в разделе Развёртывание с помощью WSGI.
Сервер разработки
Давайте проверим, работает ли ваш проект Django. Перейдите в каталог djangotutorial, если вы ещё этого не сделали, и выполните следующие команды:
$ python manage.py runserver
...\> py manage.py runserver
В командной строке появится следующий вывод:
Performing system checks... System check identified no issues (0 silenced). You have unapplied migrations; your app may not work properly until they are applied. Run 'python manage.py migrate' to apply them. September 24, 2025 - 15:50:53 Django version 6.0, using settings 'mysite.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C. WARNING: This is a development server. Do not use it in a production setting. Use a production WSGI or ASGI server instead. For more information on production servers see: https://docs.djangoproject.com/en/6.0/howto/deployment/
Примечание
Пока не обращайте внимания на предупреждение о неприменённых миграциях базы данных; скоро мы займёмся базой данных.
Теперь, когда сервер запущен, откройте в браузере адрес http://127.0.0.1:8000/. Вы увидите страницу «Поздравляем!» с взлетающей ракетой. Всё работает!
Вы запустили сервер разработки Django — лёгкий веб-сервер, полностью написанный на Python. Он входит в состав Django, чтобы вы могли быстро разрабатывать приложения, не настраивая производственный сервер, например Apache, до тех пор, пока не будете готовы к запуску в производственной среде.
Важно помнить: не используйте этот сервер в производственной среде. Он предназначен только для разработки. (Мы создаём веб-фреймворки, а не веб-серверы.)
(О том, как запустить сайт на другом порту, см. справочник по runserver.)
Автоматическая перезагрузка runserver
Сервер разработки автоматически перезагружает код Python при каждом запросе, когда это необходимо. Чтобы изменения кода вступили в силу, перезапускать сервер не нужно. Однако некоторые действия, например добавление файлов, не вызывают перезапуск, поэтому в таких случаях сервер придётся перезапустить вручную.
Создание приложения для опросов
Теперь, когда среда — «проект» — настроена, можно приступать к работе.
Каждое приложение Django представляет собой пакет Python, структура которого должна соответствовать определённым правилам. Django включает утилиту, которая автоматически создаёт базовую структуру каталогов приложения, чтобы вы могли сосредоточиться на написании кода, а не на создании каталогов.
Проекты и приложения
Чем проект отличается от приложения? Приложение — это веб-приложение, выполняющее какую-либо задачу, например система для ведения блога, база данных общедоступных записей или небольшое приложение для опросов. Проект — это набор конфигураций и приложений для определённого сайта. Проект может содержать несколько приложений. Одно приложение может входить в состав нескольких проектов.
Ваши приложения могут находиться в любом месте в пути поиска Python. В этом руководстве мы создадим приложение для опросов внутри каталога djangotutorial.
Чтобы создать приложение, убедитесь, что вы находитесь в том же каталоге, что и manage.py, и выполните эту команду:
$ python manage.py startapp polls
...\> py manage.py startapp polls
Будет создан каталог polls со следующей структурой:
polls/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
views.py
В этой структуре каталогов будет размещено приложение для опросов.
Создание первого представления
Давайте напишем первое представление. Откройте файл polls/views.py и добавьте в него следующий код Python:
polls/views.pyfrom django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
Это самое простое представление, которое можно создать в Django. Чтобы открыть его в браузере, нужно связать его с URL-адресом — для этого необходимо определить конфигурацию URL-адресов, или, сокращённо, «URLconf». Эти конфигурации URL-адресов определяются внутри каждого приложения Django и хранятся в файлах Python с именем urls.py.
Чтобы определить URLconf для приложения polls, создайте файл polls/urls.py со следующим содержимым:
polls/urls.pyfrom django.urls import path
from . import views
urlpatterns = [
path("", views.index, name="index"),
]
Теперь каталог приложения должен выглядеть так:
polls/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
urls.py
views.py
Следующий шаг — настроить корневой URLconf проекта mysite так, чтобы он включал URLconf, определённый в polls.urls. Для этого добавьте импорт django.urls.include в mysite/urls.py и вставьте include() в список urlpatterns. В результате получится:
mysite/urls.pyfrom django.contrib import admin
from django.urls import include, path
urlpatterns = [
path("polls/", include("polls.urls")),
path("admin/", admin.site.urls),
]
Функция path() принимает как минимум два аргумента: route и view. Функция include() позволяет ссылаться на другие URLconf. Когда Django встречает include(), он отбрасывает ту часть URL-адреса, которая совпала до этого момента, и передаёт оставшуюся строку подключённому URLconf для дальнейшей обработки.
Функция include() позволяет легко подключать URL-адреса. Поскольку у опросов есть собственный URLconf (polls/urls.py), их можно разместить по адресу «/polls/», «/fun_polls/», «/content/polls/» или по любому другому корневому пути — приложение всё равно будет работать.
Когда использовать include()
При подключении других шаблонов URL-адресов всегда используйте include(). Единственное исключение — admin.site.urls, готовый URLconf, предоставляемый Django для стандартного сайта администратора.
Теперь вы подключили представление index к URLconf. Проверьте, работает ли оно, выполнив следующую команду:
$ python manage.py runserver
...\> py manage.py runserver
Откройте в браузере адрес http://localhost:8000/polls/. Вы должны увидеть текст «Здравствуйте, мир. Вы находитесь на главной странице опросов.», который вы определили в представлении index.
Страница не найдена?
Если вы видите страницу с ошибкой, проверьте, что открываете адрес http://localhost:8000/polls/, а не http://localhost:8000/.
Когда вы освоитесь с основным циклом обработки запросов и ответов, прочитайте часть 2 этого руководства, чтобы начать работу с базой данных.
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/6.0/intro/tutorial01/