Введение
В этом руководстве мы проведем вас по созданию базового приложения для опросов.
💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал
В этом руководстве мы проведем вас по созданию базового приложения для опросов.
Пусть мы будем учиться на примерах.
На протяжении всего этого руководства мы проведем вас по созданию базового приложения для опросов.
Оно будет состоять из двух частей:
Предполагается, что у вас уже установлен 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, что ему разрешается обслуживать запросы с любым заголовком хоста.
По умолчанию команда 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 и вы увидите ту же страницу "Поздравляем".
Полную документацию по серверу разработки можно найти в справочнике по runserver
.
Автоматическое перезагрузка
runserver
Сервер разработки автоматически перезагружает Python-код по мере необходимости для каждого запроса. Вам не нужно перезапускать сервер, чтобы изменения в коде вступили в силу. Однако некоторые действия, такие как добавление файлов, не вызывают перезагрузку, поэтому в таких случаях вам придется перезапустить сервер.
Теперь, когда ваша среда (проект) настроена, вы можете приступить к работе.
Каждое приложение, которое вы пишете в 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://index
.
Функция ~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, чтобы улучшить свои навыки.