Написание вашего первого приложения на 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/.

Когда вы освоитесь с основами запросов и ответов, прочитайте вторую часть этого руководства, чтобы начать работу с базой данных.

Вернуться на верх