Создание вашей первой Django-приложения, часть 1
Давайте учиться на примере.
В этом руководстве мы покажем вам, как создать базовое приложение опросов.
Оно будет состоять из двух частей:
- Публичный сайт, который позволяет пользователям просматривать опросы и голосовать в них.
- Админ-панель, которая позволяет вам добавлять, изменять и удалять опросы.
Мы предполагаем, что у вас уже установлен Django. Вы можете проверить, установлен ли Django и какую версию вы используете, выполнив следующую команду в командной строке (представленной префиксом $):
$ python -m django --version
...\> py -m django --version
Если Django установлен, вы увидите версию вашей установки. Если нет, вы получите ошибку, сообщающую о том, что «модуль django не найден».
Это руководство написано для Django 5.1, которое поддерживает Python 3.10 и более поздние версии. Если версия Django не совпадает, вы можете обратиться к руководству для вашей версии Django, используя переключатель версий в правом нижнем углу этой страницы, или обновите Django до последней версии. Если вы используете более старую версию Python, обратитесь к Какой версии Python я могу использовать с Django?, чтобы найти совместимую версию Django.
См. Как установить Django для получения советов по удалению старых версий Django и установке новой.
Где получить помощь:
Если у вас возникнут трудности с прохождением этого руководства, обратитесь к разделу Получение помощи раздела FAQ.
Создание проекта
Если вы используете Django впервые, вам нужно выполнить некоторые начальные настройки. В частности, вам необходимо автоматически сгенерировать код, который создаст Django-проект – набор настроек для экземпляра Django, включая конфигурацию базы данных, специфичные для Django параметры и настройки приложений.
Из командной строки, cd в каталог, где вы хотите сохранить свой код, а затем выполните следующую команду:
$ django-admin startproject mysite
...\> django-admin startproject mysite
Это создаст mysite каталог в вашем текущем каталоге. Если это не сработало, см. Проблемы с запуском django-admin.
Примечание
Необходимо избегать именования проектов именами встроенных компонентов Python или Django. В частности, это означает, что вы не должны использовать имена, такие как django (что приведет к конфликту с самим Django) или test (что конфликтует со встроенным пакетом Python).
Давайте посмотрим, что startproject создало:
mysite/
manage.py
mysite/
__init__.py
settings.py
urls.py
asgi.py
wsgi.py
Эти файлы:
- Внешний
mysite/корневой каталог — контейнер для вашего проекта. Его имя не имеет значения для Django; вы можете переименовать его в любое другое. -
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-проект. Перейдите в внешний 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. August 13, 2024 - 15:50:53 Django version 5.1, 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), пока вы не будете готовы к нему.
Сейчас хороший момент, чтобы отметить: не используйте этот сервер в среде, похожей на производственную. Он предназначен только для использования во время разработки. (Мы занимаемся созданием веб-фреймворков, а не веб-серверов.)
(Чтобы обслуживать сайт на другом порту, см. runserver.)
Автоматическая перезагрузка 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
Эта структура каталогов будет содержать приложение опросов.
Напишите ваш первый вид
Давайте напишем первый вид. Откройте файл 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),
]
Функция include() позволяет ссылаться на другие URLconf. Когда 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/ в вашем браузере. Вы должны увидеть текст «Привет, мир. Вы находитесь на главной странице опросов.», который вы определили в представлении 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 вашего проекта, затрагивая только один файл.
Когда вы освоите базовый обмен запросами и ответами, прочитайте часть 2 этого руководства, чтобы начать работу с базой данных.
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/5.1/intro/tutorial01/