Spec-Zone.ru › Django 3.2

Создание вашего первого приложения Django, часть 1

Давайте учиться на примерах.

В этом руководстве мы покажем вам, как создать простое приложение опросов.

Оно будет состоять из двух частей:

  • Общедоступный сайт, который позволяет людям просматривать опросы и голосовать в них.
  • Сайт администрирования, который позволяет добавлять, изменять и удалять опросы.

Мы предполагаем, что у вас уже установлен Django. Вы можете проверить установку Django и её версию, выполнив следующую команду в командной строке (обозначенная префиксом $):

$ python -m django --version
...\> py -m django --version

Если Django установлен, вы увидите версию вашей установки. Если нет, вы получите ошибку, сообщающую о том, что «Нет модуля named 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 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.

April 15, 2021 - 15:50:53
Django version 3.2, 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.py
from 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.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, так что у вас будет:

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),
]

Функция 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/3.2/intro/tutorial01/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API