Создание базового приложения для опросов

DjangoDjangoBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL django(("Django")) -.-> django/CoreConfigurationandRoutingGroup(["Core Configuration and Routing"]) django(("Django")) -.-> django/DatabaseModelsandMigrationsGroup(["Database, Models, and Migrations"]) django(("Django")) -.-> django/DevelopmentandAdministrationToolsGroup(["Development and Administration Tools"]) django/CoreConfigurationandRoutingGroup -.-> django/django_urls("Django Urls") django/DatabaseModelsandMigrationsGroup -.-> django/request_and_response("Request and Response") django/DevelopmentandAdministrationToolsGroup -.-> django/contrib_packages("Contrib Packages") subgraph Lab Skills django/django_urls -.-> lab-153741{{"Создание базового приложения для опросов"}} django/request_and_response -.-> lab-153741{{"Создание базового приложения для опросов"}} django/contrib_packages -.-> lab-153741{{"Создание базового приложения для опросов"}} end

Обзор

Пусть мы будем учиться на примерах.

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

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

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

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

python -m django --version

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

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

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

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

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

cd ~/project
django-admin startproject mysite

Это создаст директорию mysite в текущей директории.

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

mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        asgi.py
        wsgi.py

Эти файлы следующие:

  • Внешняя директория mysite/ является контейнером для вашего проекта. Его имя не имеет значения для Django; вы можете переименовать его в любое другое.
  • manage.py: утилита командной строки, которая позволяет вам взаимодействовать с этим проектом Django различными способами.
  • Внутренняя директория mysite/ является фактическим пакетом Python для вашего проекта. Его имя является именем пакета Python, которое вы будете использовать для импорта любых элементов внутри него (например, mysite.urls).
  • mysite/__init__.py: пустой файл, который сообщает Python, что данная директория должна рассматриваться как пакет Python.
  • mysite/settings.py: настройки/конфигурация для этого проекта Django.
  • mysite/urls.py: объявления URL для этого проекта Django; "содержание" вашего сайта, работающего на Django.
  • mysite/asgi.py: точка входа для ASGI-совместимых веб-серверов для обслуживания вашего проекта.
  • mysite/wsgi.py: точка входа для WSGI-совместимых веб-серверов для обслуживания вашего проекта.

Разработка сервера

Проверим, работает ли ваш проект Django. Перейдите в внешнюю директорию mysite, если вы этого еще не сделали, и выполните следующие команды:

cd ~/project/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.

- 15:50:53 Django version, 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/ в вашем веб-браузере. Или выполните curl 127.0.0.1:8000 в терминале. Вы увидите страницу "Поздравляем!", на которой ракета взлетает. Все работает!

В LabEx VM необходимо добавить домен LabEx в ALLOWED_HOSTS. Откройте mysite/settings.py и добавьте * в конец ALLOWED_HOSTS, чтобы он выглядел так:

ALLOWED_HOSTS = ["*"]

Это говорит Django, что ему разрешается обслуживать запросы с любым заголовком хоста.

Django development server running

Изменение порта

По умолчанию команда runserver запускает сервер разработки на внутреннем IP-адресе по порту 8000.

Если вы хотите изменить порт сервера, передайте его в качестве аргумента командной строки. Например, эта команда запускает сервер на порту 8080:

python manage.py runserver 8080

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

python manage.py runserver 0.0.0.0:8080

Теперь переключитесь на вкладку Web 8080 в LabEx VM и вы увидите ту же страницу "Поздравляем".

Django development server page

Полную документацию по серверу разработки можно найти в справочнике по runserver.

Автоматическое перезагрузка runserver
Сервер разработки автоматически перезагружает Python-код по мере необходимости для каждого запроса. Вам не нужно перезапускать сервер, чтобы изменения в коде вступили в силу. Однако некоторые действия, такие как добавление файлов, не вызывают перезагрузку, поэтому в таких случаях вам придется перезапустить сервер.

Создание приложения Polls

Теперь, когда ваша среда (проект) настроена, вы можете приступить к работе.

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

Проекты и приложения
Какая разница между проектом и приложением? Приложение - это веб-приложение, которое что-то делает, например, система блога, база данных общественных записей или маленькое приложение для опросов. Проект - это коллекция конфигурации и приложений для определенного веб-сайта. Проект может содержать несколько приложений. Приложение может быть частью нескольких проектов.

Ваши приложения могут располагаться в любом месте вашего Python path <tut-searchpath>. В этом руководстве мы создадим наше приложение для опросов в той же директории, что и файл manage.py, чтобы его можно было импортировать как собственный верхнеуровневый модуль, а не подмодуль mysite.

Чтобы создать ваше приложение, убедитесь, что вы находитесь в той же директории, что и manage.py, и введите эту команду:

cd ~/project/mysite
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 в директории polls, создайте файл с именем 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 и вставьте ~django.urls.include в список urlpatterns, чтобы у вас получилось:

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path("polls/", include("polls.urls")),
    path("admin/", admin.site.urls),
]

Функция ~django.urls.include позволяет ссылаться на другие URLconf.每当Django遇到~django.urls.include时,它会切掉到该点为止匹配的URL的任何部分,并将剩余的字符串发送到包含的URLconf进行进一步处理。

~django.urls.include背后的想法是使URL的即插即用变得容易。由于投票在自己的URLconf(polls/urls.py)中,它们可以放在“/polls/”下,或“/fun_polls/”下,或“/content/polls/”下,或任何其他路径根目录下,应用程序仍然可以正常工作。

Когда использовать ~django.urls.include()
Вы должны всегда использовать include() при включении других URL-шаблонов. admin.site.urls - единственное исключение из этого правила.

Теперь вы подключили представление index к URLconf. Проверьте, что все работает с помощью следующей команды:

python manage.py runserver 0.0.0.0:8080

Перейдите в браузере по адресу <http:///polls/>, и вы должны увидеть текст "Hello, world. You're at the polls index.", который вы определили в представлении index.

Django URLconf structure

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

Аргумент ~django.urls.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/.

Аргумент ~django.urls.path: view

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

Аргумент ~django.urls.path: kwargs

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

Аргумент ~django.urls.path: name

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

Резюме

Поздравляем! Вы завершили лабораторную работу по созданию базового приложения для опросов. Вы можете практиковаться в других лабораторных работах в LabEx, чтобы улучшить свои навыки.