Написание вашего первого приложения Django, часть 1 ¶
Учимся на примере.
В этом руководстве мы покажем вам, как создать базовое приложение для опроса.
Он будет состоять из двух частей:
- Общедоступный сайт, который позволяет людям просматривать и голосовать в опросах.
- Сайт администратора, который позволяет добавлять, изменять и удалять опросы.
Предположим, вы уже установили Django . Вы можете узнать, установлен ли Django, а также его версию, выполнив следующую команду (обозначенную префиксом $):
$ python -m django --version
... \> py -m django --version
Если установлен Django, вы должны увидеть версию своей установки. В противном случае вы получите сообщение об ошибке «Модуль с именем Django не существует».
Это руководство написано для Django 3.1, который поддерживает Python 3.6 и новее. Если версия Django не совпадает, вы можете обратиться к руководству для своей версии Django, используя переключатель версий в правом нижнем углу этой страницы, или обновите Django до последней версии. Если вы используете старую версию Python, проверьте, какую версию Python можно использовать с Django? чтобы найти совместимую версию Django.
См. Как установить Django для получения информации о том, как удалить старые версии Django и установить более новую версию.
Где получить помощь:
Если у вас возникли проблемы с прохождением этого руководства, перейдите в раздел « Получение справки » в FAQ.
Создание проекта ¶
Если вы впервые используете Django, вам придется позаботиться о некоторых начальных настройках. В частности, вы будете иметь , чтобы автоматически генерировать код , который устанавливает Django проекта - набор настроек для экземпляра Django, включая параметры базы данных, опции Django-специфических и настроек приложения.
Из командной строки перейдите в каталог, в котором вы хотите сохранить свой код, затем выполните следующую команду:
$ 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. Вы можете прочитать все подробности о : file: `manage.py` в: doc :: / ref / django-admin.- Внутри каталога
mysite/
находится сам пакет Python для вашего проекта. Его имя - это имя пакета Python, который вам нужно будет использовать для импорта в него всего (например,mysite.urls
). mysite/__init__.py
: Пустой файл, который сообщает 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-совместимых веб-серверов для обслуживания вашего проекта. Смотрите: doc: ` / howto / deployment / wsgi / index` для более подробной информации.
Сервер разработки ¶
Давайте проверим, что ваш проект Django работает. Перейдите во внешний каталог mysite
, если вы еще этого не сделали, и выполните следующие команды:
$ python manage.py runserver
... \> сервер запуска py manage.py
В командной строке вы увидите следующий вывод:
Выполнение системных проверок ... Проверка системы не выявила проблем (0 отключено). У вас есть непримененные миграции; ваше приложение может не работать должным образом, пока они не будут применены. Запустите python manage.py migrate, чтобы применить их. 07 августа, 2020-15: 50:53 Django версии 3.1 с использованием настроек 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 есть утилита, которая автоматически генерирует базовую структуру каталогов приложения, поэтому вы можете сосредоточиться на написании кода вместо создания каталогов.
Проекты vs. Приложения
В чем разница между проектом и приложением? Приложение - это веб-приложение, которое что-то делает, например, система веб-журнала, база данных публичных записей или небольшое приложение для опросов. Проект - это набор настроек и приложений для определенного веб-сайта. Проект может содержать несколько приложений. Приложение может быть в нескольких проектах.
Ваши приложения могут жить где угодно на вашем пути 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-адресов. Поскольку опросы находятся в их собственном 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
.
Страница не найдена?
Если вы получаете здесь страницу с ошибкой, убедитесь, что вы переходите по URL-адресу http: // localhost: 8000 / polls /, а не по URL-адресу http: // localhost: 8000 / .
path()
Функция принимает четыре аргумента, два обязательных route
и view
; и два необязательных kwargs
и name
. Пришло время рассмотреть, зачем нужны эти аргументы.
аргумент path()
: route
¶
route
- строка, содержащая шаблон URL. Когда Django обрабатывает запрос, он начинается с первого шаблона urlpatterns
и продолжается вниз по списку, сравнивая запрошенный URL-адрес с каждым шаблоном, пока не найдет тот, который соответствует.
Обратите внимание, что эти регулярные выражения не ищут параметры GET и POST или имя домена. Например, в запросе к URL-адресу 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 этого руководства, чтобы начать работу с базой данных.