Spec-Zone.ru › Django 2.0

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

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

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

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

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

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

$ python -m django --version

Если Django установлен, вы увидите версию вашей установки. Если нет, вы получите ошибку, сообщающую «Нет модуля с именем django».

Это руководство написано для Django 2.0, которое поддерживает Python 3.4 и более поздние версии. Если версия 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

Это создаст 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
        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

Вы увидите следующий вывод в командной строке:

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.

July 01, 2019 - 15:50:53
Django version 2.0, 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

Если вы хотите изменить IP-адрес сервера, передайте его вместе с портом. Например, чтобы слушать на всех доступных общедоступных IP-адресах (что полезно, если вы используете Vagrant или хотите продемонстрировать свою работу на других компьютерах в сети), используйте:

$ python 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

Это создаст каталог 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() позволяет ссылаться на другие 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

Перейдите по ссылке http://localhost:8000/polls/ в вашем браузере, и вы должны увидеть текст «Привет, мир. Вы находитесь на главной странице опросов.», который вы определили в index представлении.

Функция path() принимает четыре аргумента, два обязательных: route и view, и два необязательных: kwargs, и name. На данном этапе стоит рассмотреть назначение этих аргументов.

path() argument: 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() argument: view

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

path() argument: kwargs

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

path() argument: name

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

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

© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/2.0/intro/tutorial01/

Spec-Zone.ru

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