Написание вашего первого приложения на Django, часть 1¶
Давайте учиться на примере.
В этом уроке мы расскажем о создании базового приложения для голосования.
Он будет состоять из двух частей:
- Публичный сайт, который позволяет людям просматривать опросы и голосовать в них.
- Сайт администратора, который позволяет добавлять, изменять и удалять опросы.
Мы предполагаем, что вы уже установили Django. Вы можете узнать, установлена ли Django и какая версия, выполнив в командной строке следующую команду (указывается префиксом $):
$ python -m django --version
...\> py -m django --version
Если фреймворк Django установлен, вы увидите номер версии. Если нет, вы получите сообщение об ошибке «Нет модуля с именем django».
Этот учебник написан для Django 5.0, которая поддерживает Python 3.10 и более поздние версии. Если версия Django не совпадает, вы можете обратиться к руководству для вашей версии Django, используя переключатель версий в правом нижнем углу этой страницы, или обновить Django до самой новой версии. Если вы используете старую версию Python, проверьте Какие версии Python можно использовать с Django?, чтобы найти совместимую версию Django.
Смотрите Как установить Django, чтобы узнать как удалить старые версии Django и установить последнюю версию.
Где можно получить помощь:
Если у вас возникли проблемы с прохождением этого руководства, перейдите в раздел часто задаваемых вопросов Получение справки.
Создание проекта¶
Если вы раньше Django не использовали, то необходимо позаботиться о начальной настройке. А именно, необходимо автоматически сгенерировать определенный код, который устанавливает Django project — набор настроек для конкретного экземпляра Django, включающий в себя конфигурацию базы данных, специфичные для Django опции специфичные настройки для приложения.
Выполните в терминале в командной строке cd
: смену каталога на тот, в котором вы сохранили код, затем запустите следующую команду:
$ django-admin startproject mysite
...\> django-admin startproject mysite
Это создаст каталог mysite
в текущем каталоге. Если этого не произошло, то смотрите Проблемы с запуском django-admin.
Примечание
Не рекомендуется в качестве названия проекта названия встроенных компонентов Python или Django. Это значит, что следует избегать использования таких имен, как django
(будет конфликт с самим фреймворком) или test
(будет конфликтовать со стандартным пакетом Python).
Посмотрим, что создал startproject
:
mysite/
manage.py
mysite/
__init__.py
settings.py
urls.py
asgi.py
wsgi.py
Разберем, для чего нужны эти файлы и каталоги:
- Внешний корневой каталог
mysite/
— это контейнер для вашего проекта. Его имя не имеет значения для Джанго; Вы можете переименовать его на что угодно. manage.py
: утилита, позволяющая взаимодействовать с проектом различными способами. Вы можете прочитать все подробности оmanage.py
в django-admin и manage.py.- Внутренний каталог
mysite/
это 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. Перейдите во внешний каталог mysite
, если вы этого еще не сделали, и выполните следующие команды:
$ 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.0, using settings 'mysite.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C.
Примечание
Пока игнорируйте предупреждение о непримененных миграциях базы данных; мы разберемся с базой данных в ближайшее время.
Теперь, когда сервер запущен, зайдите на сайт http://127.0.0.1:8000/ с помощью веб-браузера. Вы увидите страницу «Поздравляем!» с взлетающей ракетой. Все получилось!
Вы запустили сервер разработки Django - легкий веб-сервер, написанный исключительно на Python. Мы включили его в Django, чтобы вы могли быстро разрабатывать вещи, не занимаясь настройкой производственного сервера - такого как Apache - до тех пор, пока вы не будете готовы к производству.
Сейчас самое время отметить: не используйте этот сервер в чем-либо, напоминающем производственную среду. Он предназначен только для использования во время разработки. (Мы занимаемся созданием веб-фреймворков, а не веб-серверов).
(To serve the site on a different port, see the runserver
reference.)
Автоматическая перезагрузка runserver
Сервер разработки автоматически перезагружает код Python для каждого запроса по мере необходимости. Вам не нужно перезагружать сервер, чтобы изменения в коде вступили в силу. Однако некоторые действия, такие как добавление файлов, в эти условия не входят, поэтому вам придется перезапустить сервер в этих случаях.
Создание приложения Polls¶
Теперь, когда ваше окружение - «проект» - настроено, вы можете приступить к дальнейшей работе.
Каждое приложение, которое вы пишете в Django, состоит из пакета Python, который следует определенному соглашению. Django поставляется с утилитой, которая автоматически генерирует базовую структуру каталогов приложения, поэтому вы можете сосредоточиться на написании кода, а не на создании каталогов.
Проекты и приложения
В чем разница между проектом и приложением? Приложение - это веб-приложение, которое что-то делает - например, система блогов, база данных публичных записей или небольшое приложение для проведения опросов. Проект - это набор конфигураций и приложений для определенного веб-сайта. Проект может содержать несколько приложений. Приложение может находиться в нескольких проектах.
Ваши приложения могут находиться где угодно в вашем пути Python. В этом руководстве мы создадим наше приложение для опроса в том же каталоге, что и ваш файл manage.py
, чтобы его можно было импортировать как отдельный модуль верхнего уровня, а не как подмодуль mysite
.
Чтобы создать приложение, убедитесь, что вы находитесь в том же каталоге, что и 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
.
To define a URLconf for the polls
app, create a file polls/urls.py
with the following content:
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
The next step is to configure the global URLconf in the mysite
project to
include the URLconf defined in polls.urls
. To do this, add an import for
django.urls.include
in mysite/urls.py
and insert an
include()
in the urlpatterns
list, so you have:
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),
]
Функция include()
позволяет ссылаться на другие URLconfs. Всякий раз, когда Django встречает include()
, он отсекает любую часть URL-адреса, совпадающую с этой точкой, и отправляет оставшуюся строку во включенный URLconf для дальнейшей обработки.
Идея, стоящая за include()
, состоит в том, чтобы упростить добавление и воспроизведение URL-адресов. Так как опросы находятся в их собственном URLconf(polls/urls.py
), их можно поместить в «/polls/», или в «/fun_polls/», или в «/content/polls/», или по любому другому корневому пути, и приложение все равно будет работать.
Когда использовать include()
Вы всегда должны использовать include()
при включении других шаблонов URL. admin.site.urls
- единственное исключение из этого.
Теперь вы подключили представление 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/.
Функция path()
передает четыре аргумента, два обязательных: route
и view
, и два необязательных: kwargs
и name
. На данный момент стоит рассмотреть, для чего эти аргументы.
path()
, аргумент route
¶
route
- строка, содержащая шаблон URL. При обработке запроса Django начинается с первого шаблона в urlpatterns
и пробирается вниз по списку, сравнивая запрошенный URL с каждым шаблоном, пока не найдет тот, который соответствует.
Шаблоны не выполняют поиск параметров GET и POST или имени домена. Например, в запросе к https://www.example.com/myapp/
, URLconf будет искать myapp/
. В запросе к https://www.example.com/myapp/?Page=3
, URLconf также будет искать только myapp/
.
path()
, аргумент view
¶
Когда Django находит соответствующий шаблон, он вызывает указанную функцию представления с объектом HttpRequest
в качестве первого аргумента и любые «захваченные» значения из маршрута в качестве аргументов ключевого слова. Мы приведем пример этого чуть позже.
path()
, аргумент kwargs
¶
Произвольные ключевые аргументы могут быть переданы в словаре в целевое представление. Мы не собираемся использовать эту функцию Django в этом уроке.
path()
, аргумент name
¶
Присвоение имени URL-адресу позволяет вам однозначно ссылаться на него из других мест Django, особенно из шаблонов. Эта мощная функция позволяет вам вносить глобальные изменения в шаблоны URL вашего проекта, касаясь только одного файла.
Когда вы освоитесь с основами запросов и ответов, прочитайте вторую часть этого руководства, чтобы начать работу с базой данных.