Spec-Zone.ru › Django 2.1

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

Научимся на примере.

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

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

  • Веб-сайт для публичного просмотра опросов и голосования.
  • Админ-панель для добавления, изменения и удаления опросов.

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

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

Если Django установлен, вы увидите версию. Если нет, то получите ошибку «No module named django».

Этот учебник написан для Django 2.1, который поддерживает Python 3.5 и более поздние версии. Если версия Django не соответствует, вы можете обратиться к учебнику для вашей версии Django, используя переключатель версий в правом нижнем углу этой страницы, или обновите Django до последней версии. Если вы используете более старую версию Python, ознакомьтесь со статьей Какие версии Python совместимы с Django?, чтобы найти совместимую версию Django.

См. Как установить Django для получения советов по удалению старых версий Django и установке новых.

Где получить помощь:

Если у вас возникли проблемы с этим учебником, отправьте сообщение на django-users или заходите на #django на irc.freenode.net, чтобы пообщаться с другими пользователями Django, которые могут помочь.

Создание проекта

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

В командной строке перейдите cd в каталог, где вы хотите сохранить код, затем выполните следующую команду:

$ django-admin startproject mysite
...\> django-admin startproject mysite

Это создаст каталог mysite в текущем каталоге. Если это не сработало, обратитесь к Проблемы с запуском django-admin.

Примечание

Не стоит называть проекты именами встроенных компонентов Python или Django. В частности, избегайте имен, таких как django (что вызовет конфликт с самим Django) или test (что вызовет конфликт со встроенным пакетом Python).

Где должен храниться код?

Если у вас есть опыт работы с обычным PHP (без современных фреймворков), вы, вероятно, привыкли размещать код в корне документа Web-сервера (например, /var/www). В Django так делать не нужно. Это плохая идея, так как код Python может быть просмотрен через Web, что создаёт риск для безопасности.

Разместите код в каталоге вне корня документа, например, /home/mycode.

Посмотрим, что создал startproject:

mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.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/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.

January 08, 2020 - 15:50:53
Django version 2.1, 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 для каждого запроса по мере необходимости. Вам не нужно перезапускать сервер, чтобы изменения кода вступили в силу. Однако некоторые действия, такие как добавление файлов, не вызывают перезапуск, поэтому в таких случаях придётся перезапустить сервер.

Создание приложения Опросы

Теперь, когда ваша среда («проект») настроена, вы готовы начать работу.

Каждое приложение, которое вы пишете в 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 в каталоге опросов, создайте файл под названием 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/2.1/intro/tutorial01/

Spec-Zone.ru

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