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

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-адресов. Поскольку опросы находятся в их собственном 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 этого руководства, чтобы начать работу с базой данных.

Copyright ©2020 All rights reserved