Написание вашего первого приложения на Django, часть 1¶
Давайте учиться на примере.
В этом уроке мы расскажем о создании базового приложения для голосования.
Он будет состоять из двух частей:
- Публичный сайт, который позволяет людям просматривать опросы и голосовать в них.
- Сайт администратора, который позволяет добавлять, изменять и удалять опросы.
Мы предполагаем, что вы уже установили Django. Вы можете узнать, установлена ли Django и какая версия, выполнив в командной строке следующую команду (указывается префиксом $):
$ python -m django --version
...\> py -m django --version
Если фреймворк Django установлен, вы увидите номер версии. Если нет, вы получите сообщение об ошибке «Нет модуля с именем django».
Этот учебник написан для Django 5.2, которая поддерживает Python 3.10 и более поздние версии. Если версия Django не совпадает, вы можете обратиться к руководству для вашей версии Django, используя переключатель версий в правом нижнем углу этой страницы, или обновить Django до самой новой версии. Если вы используете старую версию Python, проверьте Какие версии Python можно использовать с Django?, чтобы найти совместимую версию Django.
Где можно получить помощь:
Если у вас возникли проблемы с прохождением этого руководства, перейдите в раздел часто задаваемых вопросов Получение справки.
Создание проекта¶
Если вы раньше Django не использовали, то необходимо позаботиться о начальной настройке. А именно, необходимо автоматически сгенерировать определенный код, который устанавливает Django project — набор настроек для конкретного экземпляра Django, включающий в себя конфигурацию базы данных, специфичные для Django опции специфичные настройки для приложения.
Из командной строки cd
перейдите в каталог, в котором вы хотели бы сохранить свой код, и создайте новый каталог с именем djangotutorial
. (Это имя каталога не имеет значения для Django; вы можете переименовать его во что угодно, что вам нравится.)
$ mkdir djangotutorial
...\> mkdir djangotutorial
Затем запустите следующую команду для начальной загрузки нового проекта Django:
$ django-admin startproject mysite djangotutorial
...\> django-admin startproject mysite djangotutorial
В результате будет создан проект с именем mysite
внутри каталога djangotutorial
. Если это не сработало, обратитесь к Проблемы с запуском django-admin.
Примечание
Не рекомендуется в качестве названия проекта названия встроенных компонентов Python или Django. Это значит, что следует избегать использования таких имен, как django
(будет конфликт с самим фреймворком) или test
(будет конфликтовать со стандартным пакетом Python).
Посмотрим, что создал startproject
:
djangotutorial/
manage.py
mysite/
__init__.py
settings.py
urls.py
asgi.py
wsgi.py
Разберем, для чего нужны эти файлы и каталоги:
manage.py
: утилита, позволяющая взаимодействовать с проектом различными способами. Вы можете прочитать все подробности о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, можно сказать, что это «оглавление» вашего проекта. Прочитайте больше информации о 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. апреля 25, 2025 - 15:50:53 Django version 5.2, 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/5.2/howto/deployment/
Примечание
Пока игнорируйте предупреждение о непримененных миграциях базы данных; мы разберемся с базой данных в ближайшее время.
Теперь, когда сервер запущен, зайдите на сайт http://127.0.0.1:8000/ с помощью веб-браузера. Вы увидите страницу «Поздравляем!» с взлетающей ракетой. Все получилось!
Вы запустили сервер разработки Django - легкий веб-сервер, написанный исключительно на Python. Мы включили его в Django, чтобы вы могли быстро разрабатывать вещи, не занимаясь настройкой производственного сервера - такого как Apache - до тех пор, пока вы не будете готовы к производству.
Сейчас самое время отметить: не используйте этот сервер в чем-либо, напоминающем производственную среду. Он предназначен только для использования во время разработки. (Мы занимаемся созданием веб-фреймворков, а не веб-серверов).
(Чтобы обслуживать сайт на другом порту, обратитесь к ссылке runserver
.)
Автоматическая перезагрузка runserver
Сервер разработки автоматически перезагружает код Python для каждого запроса по мере необходимости. Вам не нужно перезагружать сервер, чтобы изменения в коде вступили в силу. Однако некоторые действия, такие как добавление файлов, в эти условия не входят, поэтому вам придется перезапустить сервер в этих случаях.
Создание приложения Polls¶
Теперь, когда ваше окружение - «проект» - настроено, вы можете приступить к дальнейшей работе.
Каждое приложение, которое вы пишете в Django, состоит из пакета Python, который следует определенному соглашению. Django поставляется с утилитой, которая автоматически генерирует базовую структуру каталогов приложения, поэтому вы можете сосредоточиться на написании кода, а не на создании каталогов.
Проекты и приложения
В чем разница между проектом и приложением? Приложение - это веб-приложение, которое что-то делает - например, система блогов, база данных публичных записей или небольшое приложение для проведения опросов. Проект - это набор конфигураций и приложений для определенного веб-сайта. Проект может содержать несколько приложений. Приложение может находиться в нескольких проектах.
Ваши приложения могут находиться в любом месте вашего Python path. В этом руководстве мы создадим наше приложение для опроса в папке 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
В этой структуре каталогов будет размещено приложение опроса.
Написание первого отображения¶
Давайте напишем первое представление (view). Откройте файл polls/views.py
и вставьте в него следующий код Python:
polls/views.py
¶from 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.py
¶from 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.py
¶from 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()
позволяет ссылаться на другие URLconfs. Всякий раз, когда Django встречает include()
, он отсекает любую часть URL-адреса, соответствующую этому моменту, и отправляет оставшуюся строку во включенный URLconf для дальнейшей обработки.
Идея, стоящая за include()
, состоит в том, чтобы упростить добавление и воспроизведение URL-адресов. Так как опросы находятся в их собственном URLconf(polls/urls.py
), их можно поместить в «/polls/», или в «/fun_polls/», или в «/content/polls/», или по любому другому корневому пути, и приложение все равно будет работать.
Когда использовать include()
Вы всегда должны использовать include()
при включении других шаблонов URL-адресов. Единственным исключением является admin.site.urls
, который представляет собой предварительно созданный URLconf, предоставляемый Django для сайта администратора по умолчанию.
Теперь вы подключили представление index
к URLconf. Убедитесь, что он работает с помощью следующей команды:
$ python manage.py runserver
...\> py manage.py runserver
Перейдя в браузере по адресу http://localhost:8000/polls/, вы должны увидеть текст «Hello, world. You’re at the polls index.», который вы определили в представлении index
.
Страница не найдена?
Если вы получили страницу с ошибкой, убедитесь, что переходите на http://localhost:8000/polls/, а не на http://localhost:8000/.
Когда вы освоитесь с основами запросов и ответов, прочитайте вторую часть этого руководства, чтобы начать работу с базой данных.