Как создать приложение django
Мы создадим проект, состоящий из простого приложения для голосования.
Проект будет состоять из двух частей:
Публичный сайт, который отображает пользователям голосования и позволяет им голосовать.
Интерфейс администратора, который позволяет вам добавлять, изменять и удалять голосования.
Мы предполагаем, что вы уже установили Django. Вы можете проверить это, запустив консоль Python и выполнив следующие команды:
Учебник написан для Django 1.9 и Python 3.4 и выше. Если версия Django отличается, вы можете обратиться к документации, соответствующей версии Django, или обновить Django до последней версии. Если вы все еще используете Python 2.7, ваш код может отличаться от приведенного в этом учебнике, и вы должны немного изменить, как это будет указано в комментариях.
Смотрите Как установить Django, чтобы узнать как удалить старую версию Django и установить новую.
Где искать помощь:
Создание проекта¶
Используя командную строку, перейдите в каталог, где вы хотите хранить код, и выполните следующую команду:
Это создаст каталог mysite в текущем каталоге. Если нет, смотрите Трудности с запуском django-admin .
Вы не должны использовать в качестве названия проекта названия компонентов Python или Django. Это означает, что проект не может называться django (что конфликтует с Django) или test (конфликтует со стандартным пакетом Python).
Где разместить этот код?
Если вы раньше использовали PHP, то, наверное, привыкли размещать код проекта в корневом каталоге сайта на Web-сервере (например, /var/www ). C Django вы не должны этого делать. Это плохая идея добавлять код проекта в корень Web-сервера, так как есть риск, что он будет доступен для просмотра. Не делайте этого в целях безопасности.
Разместите код в каталоге вне корневой директории сайта, например /home/mycode .
Давайте посмотрим, что было создано при помощи команды startproject :
Рассмотрим эти файлы:
manage.py : Скрипт, который позволяет вам взаимодействовать с проектом Django. Подробности о manage.py читайте в разделе django-admin и manage.py.
mysite/__init__.py : Пустой файл, который указывает Python, что текущий каталог является пакетом Python. (Читайте о пакетах в официальной документации Python, если вы новичок в Python.)
mysite/settings.py : Настройки/конфигурация проекта. Раздел Настройки Django расскажет вам все о настройках проекта.
mysite/wsgi.py : Точка входа вашего проекта для WSGI-совместимых веб-серверов. Подробности читайте в разделе Развёртывание с WSGI.
Сервер для разработки¶
Давайте проверим, что все заработало. Перейдите во внешний каталог mysite , если вы этого еще не сделали, и выполните команду:
Вы увидите следующий вывод:
Игнорируйте предупреждения о невыполненных миграциях, мы разберемся с этим позже
По умолчанию, команда runserver запускает сервер для разработки на локальном IP используя порт 8000.
Если вы хотите изменить порт, укажите его как аргумент. Например, эта команда запускает сервер используя порт 8080:
Если вы хотите изменить IP сервера, передайте его вместе со значением порта. Чтобы слушать все публичные IP (полезно, если вы хотите показать свою работу на других компьютерах), используйте:
Смотрите полное описание команды runserver .
Dev-сервер самостоятельно перегружается при изменении Python файлов. Однако некоторые действия не перегружают сервер, например, добавление новых файлов. В таких случаях необходимо самостоятельно перегрузить сервер.
Создание приложения Polls¶
Теперь, после создания окружения (проекта), мы можем приступить к работе.
Каждое приложение Django состоит из пакета Python, который следует некоторым соглашениям. Django содержит команду, которая создает структуру для нового приложения, что позволяет вам сосредоточиться на написании кода, а не на создании каталогов.
Проекты или приложения
Ваше приложение может находиться где угодно в путях Python. В этом учебнике, мы будем создавать приложение голосования возле файла manage.py , и оно может быть импортировано как независимый модуль, а не подмодуль mysite .
Создавая приложение, убедитесь, что вы находитесь в том же каталоге, что и файл manage.py , и выполните команду:
Эта команда создаст каталог polls :
Эти файлы являются частью приложения голосования.
Создадим свое первое представление¶
Давайте создадим свое первое представление. Откроем файл polls/views.py и добавим следующий код:
Это самое простое представление, которое можно создать на Django. Чтобы вызвать представление, нам нужно назначить его на какой-то URL через конфигурацию URL-ов
Чтобы добавить настройки URL-ов в приложение для голосования, создадим файл urls.py . Каталог приложения должен выглядеть следующим образом:
В файл polls/urls.py добавим следующий код:
Не совпадает с тем, что у вас получилось?
Если вы видите include(admin.site.urls) вместо admin.site.urls , возможно вы используете версию Django, которая не соответствует этому учебнику. Вам следует читать старую версию учебника или обновить Django.
Вы добавили index в настройки URL-ов. Давайте проверим, что он работает, запустив команду:
Функция url() принимает четыре аргумента, два обязательных: regex и view , и два необязательных: kwargs и name . Давайте изучим эти аргументы.
url() argument: regex¶
Замечание о производительности: эти регулярные выражения компилируются при первом импорте модуля с конфигурацией URL-ов. Они работают очень быстро (до тех пор, пока они достаточно просты, как уже замечалось выше).
url() argument: view¶
url() argument: kwargs¶
В представление можно передать предопределенные именованные аргументы. Мы не будет использовать эту возможность в учебнике.
url() argument: name¶
Добавив имя вашему URL-у, вы можете обратиться к нему по имени из любой точки проекта, особенно шаблонов. Такой подход позволяет делать глобальные изменения в настройках URL-ов, меняя минимум файлов.
Изучив основы о запросах и ответах, приступим ко второй части учебника, чтобы начать работать с базой данных.
В этом уроке мы расскажем о создании базового приложения для голосования.
Он будет состоять из двух частей:
- Публичный сайт, который позволяет людям просматривать опросы и голосовать в них.
- Сайт администратора, который позволяет добавлять, изменять и удалять опросы.
Мы предполагаем, что вы уже установили Django . Вы можете узнать, установлена ли Django и какая версия, выполнив в командной строке следующую команду (указывается префиксом $):
Это руководство написано для Django 3.1, которая поддерживает Python 3.6 и более поздние версии. Если версия Django не совпадает, вы можете обратиться к учебнику для вашей версии Django, используя переключатель версий в правом нижнем углу этой страницы, или обновить Django до последней версии. Если вы используете более старую версию Python, проверьте Какие версии Python можно использовать с Django? , чтобы найти совместимую версию Django.
Смотрите Как установить Django , чтобы узнать как удалить старые версии Django и установить последнюю версию.
Где получить помощь:
Если у вас возникли проблемы с просмотром этого учебника, перейдите в раздел Получение справки FAQ.
Создание проекта¶
Если вы раньше Django не использовали, то необходимо позаботиться о начальной настройке. А именно, необходимо автоматически сгенерировать определенный код, который устанавливает Django project — набор настроек для конкретного экземпляра Django, включающий в себя конфигурацию базы данных, специфичные для Django опции специфичные настройки для приложения.
Выполните в терминале в командной строке cd : смену каталога на тот, в котором вы хотите хранить код проекта, затем запустите следующую команду:
Это создаст каталог mysite в текущем каталоге. Если этого не произошло, то смотрите Проблемы с запуском django-admin .
Не рекомендуется в качестве названия проекта названия встроенных компонентов Python или Django. Это значит, что следует избегать использования таких имен, как django (будет конфликт с самим фреймворком) или test (будет конфликтовать со стандартным пакетом Python).
Где этот код должен находится?
Если бэкграунд написан на простом старом PHP (без использования современных фреймворков), вы, вероятно, привыкли размещать код в корневом каталоге веб-сервера (например, /var/www ). С Джанго так лучше не делать. Не стоит помещать какой-либо Python код в корневой каталог веб-сервера, потому что существует риск, что он может стать доступным для просмотра. Это не очень хорошо для безопасности сервера.
Размещайте свой код в каком-либо каталоге вне корневого каталога сервера, например /home/mycode .
Давайте посмотрим на результат выполнения команды startproject :
Разберем, для чего нужны эти файлы и каталоги:
- Внешний корневой каталог mysite/ — это контейнер для вашего проекта. Его имя не имеет значения для Джанго; Вы можете переименовать его на что угодно.
- manage.py : утилита, позволяющая взаимодействовать с проектом различными способами. Вы можете прочитать все подробности о manage.py в django-admin и manage.py .
- Внутренний каталог mysite/ это Python модуль вашего проекта. Его название вы будете использовать для импорта чего-либо из этого модуля (например, mysite.urls ).
- mysite/__init__.py : пустой файл, который сообщает Python, что этот каталог должен рассматриваться как пакет Python’а. Если вы новичок в Python, прочитайте больше о пакетах в официальной документации Python.
- mysite/settings.py : Конфигурация и настройки проекта Django. В Настройки Django рассказано все о том, как работают настройки.
- mysite/urls.py : указание URL проекта на Django, можно сказать, что это «оглавление» вашего проекта. Прочитайте больше информации о URL в Диспетчер URL .
- mysite/asgi.py : точка входа для ASGI-совместимых веб-серверов для обслуживания вашего проекта. Смотрите /howto/deploy/asgi/index для более подробной информации, а также документацию по ASGI .
- mysite/wsgi.py : Точка входа для WSGI совместимых веб-серверов для работы с проектом. Смотрите Как развертывать с помощью WSGI для уточнения деталей работы.
Сервер разработки¶
Давайте проверим, работает ли ваш проект Django. Перейдите во внешний каталог mysite , если вы этого еще не сделали, и выполните следующие команды:
Вы увидите следующий вывод в командной строке:
Пока игнорируйте предупреждение о непримененных миграциях базы данных; мы разберемся с базой данных в ближайшее время.
Вы запустили сервер разработки Django: облегченный веб-сервер, написанный исключительно на Python. Мы включили его в Django, чтобы можно было быстро разрабатывать проект, не занимаясь настройкой рабочего сервера, такого как Apache, до тех пор, пока вы не будете готовы к работе.
Сейчас самое время отметить: не используйте этот сервер во всем, что напоминает производственную среду. Он предназначен только для использования при разработке. (Мы занимаемся созданием веб-фреймворков, а не веб-серверов.)
По умолчанию команда runserver запускает сервер разработки на внутреннем IP адресе с портом 8000.
Для смены порта передайте его аргументом в командной строке. Например, эта команда запускает сервер на порту 8080:
Для изменения IP адреса сервера, передайте его вместе с портом. Например, чтобы использовать все доступные публичные IP-адреса (что полезно, если вы работаете с Vagrant или хотите показать свою работу на других компьютерах в сети), используйте:
0 это сокращение для 0.0.0.0. Полная документация по серверу разработки находится в руководстве runserver .
Сервер разработки автоматически перезагружает код Python для каждого запроса по мере необходимости. Вам не нужно перезагружать сервер, чтобы изменения в коде вступили в силу. Однако некоторые действия, такие как добавление файлов, в эти условия не входят, поэтому вам придется перезапустить сервер в этих случаях.
Создание приложения Polls¶
Теперь, когда ваше окружение - «проект» - настроено, вы можете приступить к дальнейшей работе.
Каждое приложение, которое вы пишете в Django, состоит из пакета Python, который следует определенному соглашению. Django поставляется с утилитой, которая автоматически генерирует базовую структуру каталогов приложения, поэтому вы можете сосредоточиться на написании кода, а не на создании каталогов.
Проекты и приложения
В чем разница между проектом и приложением? Приложение - это веб-приложение, которое что-то делает, например, система Weblog, база данных публичных записей или небольшое приложение для опроса. Проект - это набор настроек и приложений для определенного сайта. Проект может содержать несколько приложений. Приложение может быть в нескольких проектах.
Джанго это мощный фреймворк для создания веб-приложений. Изначально Django был создан для того, чтобы быстро создавать, например, новостные сайты (или другие сайты, который нужно создавать максимально быстро). И после нативного PHP не покидает ощущение, что ты едешь на очень быстрой машине разработки. Чтобы посмотреть все его возможности для быстрой разработки, мы с вами попробуем создать простое Todo — приложение.
Начнем с формулировки краткого т.з. У нас будет небольшое веб-приложение с версткой на Bulma (да, я очень люблю Bulma. Возможно, когда-нибудь я сверну на Bootstrap или Picnic, но всему свое время). У нас (пока) нет авторизаций и пользователь может создавать, редактировать и удалять либо категорию дел, либо карточку todo, которая связана с какой-либо категорией, которую создал пользователь. Todo карточку или категорию можно удалить, поставив галочку на checkbox и нажав кнопку удалить.
Основные концепции Django
Немного поговорим о Django. Django реализует архитектурный паттерн MVT (Модель Представление Шаблон), которая немного отличается от знакомого большинству MVC (Модель Представление Контроллер) на котором работает Ruby on Rails и Laravel.
Модель (Model) Модель в Django описывает схему данных в БД. С Django ORM, вы можете самостоятельно описывать поля и любые другие типы данных, и совершать миграции для упрощения разработки.
Шаблон Шаблон в Django это простой HTML код со специальным шаблонным языком Django. DTL (Django Template Language) — это язык, с помощью которого вы можете динамически менять содержимое страницы (к примеру, изменять имя пользователя на странице, в зависимости от того, как зовут авторизовавшегося пользователя).
Настройки Файл настроек в Django, в котором находятся все настройки вашего веб-приложения. Он включает в себя секретный ключ, папки с шаблонами, middlewares (которые отвечают, например за то, чтобы ваши приватные альбомы не увидели другие пользователи), подключение к базе данных, и много всего остального.
Url Файл настройки роутинга — примерно то же самое, что и в Angular или Laravel. Это связывает представление с url запросами.
Установка Python и Django
Автор этой статьи (то есть я) кроме написания статей занимается еще и обучением основам питона детей. По долгу службы я ставил Python и его пакеты на достаточно большое количество разнообразных машин. И кроме переустановок питона, один раз для установки пакета глобально сработал даже даунгрейд версии языка. Да, так тоже бывает.Версии Python
До последнего времени активно поддерживались и развивались две основные ветки Python: 2.7 и 3.x. Я буду использовать версию 3.7.3 в данной статье, но на самом деле это не так важно. Если вы правда хотите знать разницу между ними, есть специальная вики. С другой стороны, сейчас уже нет никакого смысла использовать Python версии 2.7 — обновление языка остановилось на 2.7.17 (если я правильно понимаю документацию на официальном сайте). Это означает, что есть смысл переводить проекты написанные на Python 2.7.x на новую ветку, а вот новые писать на 2 версии совсем бессмысленно.
Инсталляция Python
Если вы работаете на Mac или Ubuntu — у вас уже скорее всего установлен Python, однако 2 версии. Python третьей версии придется скачивать отдельно, и вызывать его в командной строке вы сможете через python3. В любом случае, лучше всего скачать последний релиз здесь.
Создание своего виртуального окружения
На самом деле первое приложение на Django вы можете начать разрабатывать и не создавая свое виртуальное окружение, однако навык создания виртуального окружения может пригодится если вы, например, разрабатываете приложение с определенной версией библиотеки и не хотите устанавливать библиотеки глобально и замусоривать ваш system.
Так как же использовать virtual env?
1) Самый простой вариант. Вы можете скачать замечательный IDE от JET BRAINS PyCharm Community Edition отсюда. После установки PyCharm создайте новый проект, и Pycharm по умолчанию предложит вам создать Virtual Env, в котором будет возможность установить нужную версию Django (или по умолчанию последнюю, которая на момент написания данной статьи 3.0.2):
2) Чуть более хардкорный вариант:
А что, если вы хотите запустить Django в virtual env, к примеру, в любимой папке?
Во, первых, создаем папку, в которой мы будет творить:
Дальше вводим следующие команды для активации venv, где django_env имя нашего виртуального окружения:
Далее наше виртуальное окружение активировалось. Можем поставить необходимые пакеты. В нашем случае это Django:
Если вы захотите выключить виртуальное окружение, чтобы вернуться в ваш глобальный python (вернуться в контекст system), введите следующую команду:
Хорошо, надеюсь с виртуальным окружением мы разобрались. Если возникли какие-то проблемы и дополнительные вопросы, полезные ссылочки можно найти здесь и здесь .
Создание самого проекта
Допустим вы выбрали какой-то из способов создания своего виртуального окружения (или даже делаете все глобально, что же, никто не запрещает вам это делать). Теперь проходим в папку проекта и начинаем его создание:
Так, после того как Django открыл стартовую страницу, необходимо проинсталлировать наше приложение todolist в основное приложение. Открываем settings.py и добавляем в уже имеющийся список приложений наш собственный todolist:
Следующим шагом будет связывание приложения с базой данных. Если базы данных — это не то, с чем вы хотите возиться, вам стоит воспользоваться решением по умолчанию — SQlite. Я же решил воспользоваться PostgreSQL — она популярна и классически связана с Django, кроме того, потом мы можем захотеть увеличить производительность приложения. Инструкций как устанавливать PostgreSQL на все операционные системы достаточно много. Я разрабатываю под MacOS и не без небольших танцев с бубном я поставил эту базу данных, скачав сам Postgres.app отсюда . Что касается интерфейсов для БД, то здесь я воспользовался Postico и пробной версии для разработки приложения нам вполне хватит (хотя в принципе можно обойтись и без неё, потому что все наше взаимодействие с базой данных будет построено через само веб-приложение и миграции). Кроме того, пришлось поставить psycopg2 в виртуальное окружение проекта (без этого драйвера с БД ваше приложение работать не будет).
Дальше нужно настроить работу статики. По-прежнему редактируем файл settings.py , теперь в самом конце добавляем работу со статикой:
Для того, чтобы у вас заработала статика, проверьте что в списке INSTALLED_APPS находился пакет, отвечающий за статику:
django.contrib.staticfiles, на тот случай, если произойдет ошибка.
И последнее в подготовительных работах, нам нужно ещё настроить базовую работу url в проекте:
Я добавил редирект так как хочу, чтобы с дефолтной страницы localhost сразу переходил на подстраницу category(чтобы не дай бог пользователь не потерялся). Также у нас есть роутинг на две страницы: категорий и дел.
Итак, надеюсь ваше приложение не упало. Далее мы можем наконец-то переходить к созданию самого приложения:
Создание модели Todo и Категорий
Дальше приступим к созданию модели, которая будет базово взаимодействовать с нашей базой данных. Для создания модели открываем файл models.py в нашем todolist и начинаем творить. Начнем с того, что создадим таблицу категорий:
Отлично! Да, здесь у нас будет только две колонки в таблице Категорий: id и name. Дальше создадим таблицу для наших дел. Думаю, из комментариев все понятно:
После того, как ваша модель будет готова, необходимо создать миграции:
И потом запускаете сами миграции:
Создание view
Откроем файл view.py в todolist и отредактируем его. Для начала добавим необходимые импорты и редирект с главной на category:
Потом начинаем создание нашего дела. У экземпляра дела будут поля самого текста, даты, до которой должно быть закончено дело, категория дела, и объединенный контент:
После этого добавим функции добавления и удаления дел:
С тудушками все. Дальше можем перейти к странице Категорий. Создаем функцию категорий, в которой у нас тоже будет функция добавления и удаления категории. Принципиально здесь ничего нового не будет, у нас так же здесь будет возможность добавления и удаления:
На этом мы заканчиваем с файлом view и можем переходить к шаблонам:
Работа с шаблонами
Как вы помните, чтобы не писать css лишний раз, я воспользовался bulma.css для упрощения верстки. Т.к. наши страницы категорий и todo буду очень схожи, я создал три файла:
base.html , который будет включать в себя все одинаковое, что у нас есть на страницах, а в category.html , todo.html будут располагаются отличия:
Создаем base.html и редактируем его:
Дальше у нас пойдут страницы todo.html и category.html :
И category.html . В ней у нас не особо много чего меняется, принципиально никак не отличается от todo.html :
Всем спасибо! На этом все. Возможно, где-то не идеальна верстка, или есть другие предложения по улучшению приложения, всех жду в комментарии. По традиции, несколько полезных ссылок:
Содержание статьи
Если возникнут сложности, можете ознакомиться с полным набором исходных кодов примеров текущей темы на хранилище GitHub.
Есть вопросы по Python?
На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!
Telegram Чат & Канал
Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!
Паблик VK
Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!
Начальная настройка Django-приложения
Первым делом переместимся в новую директорию. Например, можно создать директорию helloworld на рабочем столе, используя следующие инструкции.
Для создания нового виртуального окружения мы используем pipenv , затем установим Django и затем активируем его.
( helloworld ) $ django - admin startproject helloworld _ project .Используйте команду tree и посмотрите на структуру созданного проекта Django. Если tree не сработала, наберите в командной строке: sudo apt install tree .
Файл settings.py контролирует настройки проекта, urls.py сообщает Django, какие страницы создать в ответ на запрос браузера или URL-адреса, а wsgi.py , что расшифровывается как Web Server Gateway Interface, помогает Django управлять конечными веб-страницами. Последний файл, manage.py , используется для выполнения различных команд Django. Это может быть запуск локального веб-сервера или создание нового приложения.
Django поставляется со встроенным локальным веб-сервером, который запускается командой runserver .
Приветственная страница Django
Обратите внимание, что в полном результате вывода будет указана дополнительная информация, среди которой будет предупреждение о непримененных миграциях 17 unapplied migrations .
You have 17 unapplied migration ( s ) . Your project may not work properly until you apply the migrations for app ( s ) : admin , auth , contenttypes , sessions . Django version 3.0.6 , using settings 'helloworld_project.settings'Тем не менее, чтобы предупреждение не мозолило глаза, мы можем удалить его. Для этого нужно остановить локальный сервер комбинацией CTRL+C , а затем выполнить команду python manage.py migrate .
Apply all migrations : admin , auth , contenttypes , sessions Applying admin . 0003_logentry_add_action_flag_choices. OK Applying contenttypes . 0002_remove_content_type_name. OK Applying auth . 0002_alter_permission_name_max_length. OK Applying auth . 0003_alter_user_email_max_length. OK Applying auth . 0007_alter_validators_add_error_messages. OK Applying auth . 0008_alter_user_username_max_length. OK Applying auth . 0009_alter_user_last_name_max_length. OK Applying auth . 0010_alter_group_name_max_length. OKЗдесь Django осуществил миграцию встроенных приложений. Теперь при повторном выполнении python manage.py runserver командная строка выведет следующий чистый результат:
Django version 3.0.6 , using settings 'helloworld_project.settings'Создание приложения на Django 3
У действующего сайта Django для онлайн-магазина может быть целый набор приложений. К примеру, одно нужно для аутентификации, другое для оплаты, а третье для оптимизации отображения деталей продукции. Каждое приложение сфокусировано на обеспечении должного функционирования изолированной области, однако все три находятся внутри одного и того проекта высшего уровня.
То, как и когда распределить функционал по приложениям, является субъективным понятием. Однако, в общем и целом у каждого приложения должна быть ясная функция.
Пришло время для создания первого приложения. Выйдите из командной строки при помощи CTRL+C . Затем наберите команду startapp с последующим названием приложения. В нашем случае это pages .
Если вы еще раз посмотрите на структуру директории при помощи команды tree , то заметите, что Django создал новую директорию pages , в которой расположены следующие файлы:
Посмотрим, за что отвечает каждый файл внутри папки pages :
- admin.py является файлом конфигурации для встроенного приложения панели администратора Django;
- apps.py является файлом конфигурации для самого приложения;
- migrations отслеживает все изменения в файле models.py , поэтому наша база данных будет постоянно синхронизироваться с models.py ;
- models.py определяет модели нашей базы данных, которые Django автоматически переводит в таблицы базы данных;
- tests.py нужен для специфических тестов приложения;
- views.py являет местом, где обрабатываются логические запросы/ответы нашего веб-приложения.
Локальные приложения всегда добавляются в самый низ, так как Django задействует настройки INSTALLED_APPS сверху вниз. Это значит, что сначала грузится внутреннее приложение admin , затем auth и так далее. Важно, чтобы главные приложения Django были доступны, ведь созданные нами приложения будут полагаться на их функционал.
Некоторым может стать интересно, зачем прописывать такую длинную строчку pages.apps.PagesConfig , почему в список нельзя просто добавить название приложения pages ?
Причина в том, что Django с каждым новым приложением создает файл apps.py , куда можно добавить дополнительную информацию, например, с фреймворка Signals, техника которого считается продвинутой. Для стабильной работы нашего простого приложения должно хватить pages , однако мы будем лишены дополнительных опций, поэтому внутри настроек INSTALLED_APPS будет лучше всегда использовать полное имя приложения с конфигурацией.
Если все вышесказанное показалось вам несколько запутанным, не переживайте. Для привыкания к структуре проектов и приложений Django нужна практика. На протяжении всего курса будем создавать множество проектов и приложений, что помогут приспособиться к принципам работы Django.
Читайте также: