Написание вашего первого приложения 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:

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 в каталоге опросов, создайте файл с именем 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()Функция позволяет ссылку других 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=3URLconf также будет искать файлы myapp/.

path()аргумент: view

Когда Django находит соответствующий шаблон, он вызывает указанную функцию просмотра с HttpRequestобъектом в качестве первого аргумента и любыми «захваченными» значениями из маршрута в качестве аргументов ключевого слова. Мы дадим пример этого чуть позже.

path()аргумент: kwargs

В целевое представление можно передать произвольные аргументы ключевого слова в словаре. Мы не собираемся использовать эту функцию Django в учебнике.

path()аргумент: name

Присвоение имени URL-адресу позволяет однозначно ссылаться на него из любого места в Django, особенно из шаблонов. Эта мощная функция позволяет вам вносить глобальные изменения в шаблоны URL-адресов вашего проекта, касаясь только одного файла.

Когда вы освоитесь с базовым потоком запросов и ответов, прочитайте часть 2 этого руководства, чтобы начать работу с базой данных.

  • 3.1
  • Версия документации: 3.2

Copyright ©2021 All rights reserved