Написание вашего первого приложения Django, часть 1 ¶
Учимся на примере.
В этом руководстве мы проведем вас через создание простого приложения для опроса.
Он будет состоять из двух частей:
- Общедоступный сайт, который позволяет людям просматривать опросы и голосовать в них.
- Сайт администратора, который позволяет добавлять, изменять и удалять опросы.
Предположим, у вас уже установлен Django . Вы можете узнать, какой Django установлен и какая версия установлена, выполнив следующую команду в приглашении оболочки (обозначено префиксом $):
$ python -m django --version
... \> py -m django --version
Если установлен Django, вы должны увидеть версию своей установки. В противном случае вы получите сообщение об ошибке «Нет модуля с именем django».
Это руководство написано для Django 3.2, который поддерживает Python 3.6 и новее. Если версия 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).
Где должен жить этот код?
Если ваш опыт работы с простым старым 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
Вы увидите следующий вывод в командной строке:
Выполнение системных проверок ... Проверка системы не выявила проблем (0 отключено). У вас есть непримененные миграции; ваше приложение может не работать должным образом, пока они не будут применены. Запустите python manage.py migrate, чтобы применить их. 22 апреля 2021 года - 15:50:53 Django версии 3.2 с использованием настроек mysite.settings Запуск сервера разработки по адресу http://127.0.0.1:8000/ Закройте сервер, нажав CONTROL-C.
Примечание
Пока не обращайте внимания на предупреждение о непримененных миграциях базы данных; мы займемся базой данных в ближайшее время.
Вы запустили сервер разработки Django, легкий веб-сервер, написанный исключительно на Python. Мы включили это в Django, чтобы вы могли быстро разрабатывать вещи, не занимаясь настройкой рабочего сервера, такого как Apache, до тех пор, пока вы не будете готовы к производству.
Пришло время отметить: не используйте этот сервер в чем-либо, напоминающем производственную среду. Он предназначен только для использования во время разработки. (Мы занимаемся созданием веб-фреймворков, а не веб-серверов.)
Теперь, когда сервер запущен, зайдите на http://127.0.0.1:8000/ в своем веб-браузере. Вы увидите сообщение «Поздравляем!» страница, со взлетом ракеты. Это сработало!
Смена порта
По умолчанию runserver
команда запускает сервер разработки на внутреннем IP-адресе через порт 8000.
Если вы хотите изменить порт сервера, передайте его в качестве аргумента командной строки. Например, эта команда запускает сервер на порту 8080:
$ python manage.py runserver 8080
... \> py manage.py сервер запуска 8080
Если вы хотите изменить IP-адрес сервера, передайте его вместе с портом. Например, чтобы прослушивать все доступные общедоступные IP-адреса (что полезно, если вы используете Vagrant или хотите продемонстрировать свою работу на других компьютерах в сети), используйте:
$ python manage.py runserver 0:8000
... \> py manage.py сервер запуска 0: 8000
0 - это ярлык для 0.0.0.0 . Полную документацию по серверу разработки можно найти в runserver
справочнике.
Автоматическая перезагрузка runserver
Сервер разработки автоматически перезагружает код Python для каждого запроса по мере необходимости. Вам не нужно перезапускать сервер, чтобы изменения кода вступили в силу. Однако некоторые действия, такие как добавление файлов, не вызывают перезапуск, поэтому в этих случаях вам придется перезапустить сервер.
Создание приложения "Опросы" ¶
Теперь, когда ваша среда - «проект» - настроена, вы готовы приступить к работе.
Каждое приложение, которое вы пишете в Django, состоит из пакета Python, который следует определенному соглашению. Django поставляется с утилитой, которая автоматически генерирует базовую структуру каталогов приложения, поэтому вы можете сосредоточиться на написании кода, а не на создании каталогов.
Проекты против приложений
В чем разница между проектом и приложением? Приложение - это веб-приложение, которое что-то делает, например, система веб-журналов, база данных общедоступных записей или небольшое приложение для опросов. Проект - это набор конфигураций и приложений для определенного веб-сайта. Проект может содержать несколько приложений. Приложение может быть в нескольких проектах.
Ваши приложения могут жить где угодно на вашем пути Python . В этом руководстве мы создадим наше приложение для опроса в том же каталоге, что и ваш
manage.py
файл, чтобы его можно было импортировать как собственный модуль верхнего уровня, а не как подмодуль mysite
.
Чтобы создать приложение, убедитесь, что вы находитесь в том же каталоге, что manage.py
и, и введите эту команду:
$ python manage.py startapp polls
... \> py manage.py startapp опросы
Это создаст каталог polls
, который выглядит следующим образом:
polls/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
views.py
В этой структуре каталогов будет размещено приложение опроса.
Напишите свой первый взгляд ¶
Напишем первое представление. Откройте файл polls/views.py
и поместите в него следующий код Python:
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
Это самый простой вид из возможных в Django. Чтобы вызвать представление, нам нужно сопоставить его с URL-адресом - и для этого нам понадобится URLconf.
Чтобы создать URLconf в каталоге опросов, создайте файл с именем urls.py
. Каталог вашего приложения теперь должен выглядеть так:
polls/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
urls.py
views.py
В polls/urls.py
файл включаем следующий код:
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
Следующим шагом является указание корневого URLconf на polls.urls
модуль. В
mysite/urls.py
добавьте импорт для django.urls.include
и вставьте
include()
в urlpatterns
список, чтобы у вас было:
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-адресов по принципу plug-and-play. Поскольку опросы находятся в собственном URLconf ( polls/urls.py
), их можно разместить в «/ polls /», «/ fun_polls /», «/ content / polls /» или любом другом корневом пути, и приложение все равно будет Работа.
Когда использовать include()
Вы всегда должны использовать, include()
когда включаете другие шаблоны URL.
admin.site.urls
единственное исключение из этого.
Теперь вы подключили index
представление к URLconf. Убедитесь, что он работает, с помощью следующей команды:
$ python manage.py runserver
... \> сервер запуска py manage.py
Перейдите по адресу http: // localhost: 8000 / polls / в своем браузере, и вы должны увидеть текст « Hello, world. Вы попали в индекс опросов. », Который вы определили в
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 этого руководства, чтобы начать работу с базой данных.