Написание вашего первого приложения Django, часть 1
Давайте учиться на примерах.
В этом руководстве мы покажем вам, как создать простое приложение опросов.
Оно будет состоять из двух частей:
- Общедоступный сайт, который позволяет людям просматривать опросы и голосовать в них.
- Сайт администратора, который позволяет вам добавлять, изменять и удалять опросы.
Мы предположим, что у вас уже установлен Django. Вы можете проверить, установлен ли Django и какую версию вы используете, выполнив следующую команду в командной строке (предполагается, что префикс $ обозначает начало команды):
$ python -m django --version
...\> py -m django --version
Если Django установлен, вы увидите версию вашей установки. Если нет, вы получите ошибку, сообщающую «Модуль django не найден».
Это руководство написано для Django 4.1, которое поддерживает Python 3.8 и более поздние версии. Если версия Django не совпадает, вы можете обратиться к руководству для вашей версии Django, используя переключатель версий в правом нижнем углу этой страницы, или обновите Django до последней версии. Если вы используете более старую версию Python, ознакомьтесь со статьей Какие версии Python совместимы с Django?, чтобы найти совместимую версию Django.
См. Как установить Django за советом о том, как удалить старые версии Django и установить новую.
Где получить помощь:
Если у вас возникли трудности с этим руководством, пожалуйста, обратитесь к разделу Получение помощи раздела вопросов и ответов.
Создание проекта
Если это ваш первый опыт работы с Django, вам нужно будет выполнить некоторые первоначальные настройки. А именно, вам нужно будет сгенерировать код, который создаст проект Django проект — коллекцию настроек для экземпляра Django, включая конфигурацию базы данных, специфичные для Django параметры и параметры, специфичные для приложения.
Из командной строки, cd в каталог, где вы хотите сохранить свой код, затем выполните следующую команду:
$ django-admin startproject mysite
...\> django-admin startproject mysite
Это создаст mysite каталог в вашем текущем каталоге. Если это не сработало, см. Проблемы с запуском django-admin.
Примечание
Вам нужно будет избегать именования проектов именами встроенных компонентов Python или Django. В частности, это означает, что вы должны избегать использования имен, таких как django (что приведет к конфликту с самим Django) или test (что приведет к конфликту со встроенным пакетом Python).
Где должен находиться этот код?
Если у вас опыт работы с обычным PHP (без использования современных фреймворков), вы, вероятно, привыкли размещать код в корневом каталоге веб-сервера (например, в /var/www). В Django этого не делается. Это не хорошая идея размещать код Python в корневом каталоге вашего веб-сервера, так как это увеличивает вероятность того, что люди смогут просмотреть ваш код через веб-сервер. Это нехорошо с точки зрения безопасности.
Поместите свой код в какой-нибудь каталог вне корневого каталога, например, /home/mycode.
Давайте посмотрим, что 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 03, 2022 - 15:50:53 Django version 4.1, using settings 'mysite.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C.
Примечание
Сейчас проигнорируйте предупреждение о не примененных миграциях базы данных; мы разберёмся с базой данных вскоре.
Вы запустили сервер разработки Django, лёгкий веб-сервер, написанный полностью на Python. Мы включили его в Django, чтобы вы могли быстро разрабатывать, не тратя время на настройку сервера в среде производства (например, Apache), пока вы не будете готовы к этому.
Сейчас важно отметить: не используйте этот сервер в среде, похожей на среду производства. Он предназначен только для использования при разработке. (Мы занимаемся созданием веб-фреймворков, а не веб-серверов.)
После запуска сервера посетите http://127.0.0.1:8000/ в своём браузере. Вы увидите страницу «Поздравляем!», с взлетающей ракетой. Всё работает!
Изменение порта
По умолчанию команда runserver запускает сервер разработки на внутреннем IP-адресе на порту 8000.
Если вы хотите изменить порт сервера, передайте его как аргумент командной строки. Например, эта команда запускает сервер на порту 8080:
$ python manage.py runserver 8080
...\> py manage.py runserver 8080
Если вы хотите изменить IP-адрес сервера, передайте его вместе с портом. Например, для прослушивания на всех доступных публичных IP-адресах (что полезно, если вы используете Vagrant или хотите показать свою работу на других компьютерах в сети), используйте:
$ python manage.py runserver 0:8000
...\> py manage.py runserver 0:8000
0 — это сокращение для 0.0.0.0. Полную документацию по серверу разработки можно найти в справке 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 — и для этого нам нужен URLconf.
Чтобы создать URLconf в каталоге polls, создайте файл urls.py. Каталог вашего приложения теперь должен выглядеть так:
polls/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
urls.py
views.py
В файле polls/urls.py включите следующий код:
polls/urls.pyfrom django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
Следующим шагом является указание корневого URLconf на модуль polls.urls. В mysite/urls.py, добавьте импорт для django.urls.include и вставьте 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/4.1/intro/tutorial01/