Добавить в корзинуПозвонить
Найти в Дзене
Борис

Конспект ознакомительного курса Django в Яндекс.Практикум

1. Фреймворк Django. Авторы: веб-разработчики Адриан Головати и Саймон Уиллисон (США). Первый публичный релиз в 2008г. Название: в честь французского гитариста-виртуоза Джанго Рейнхардта. Фреймворк (с англ. framework — «каркас, структура») - программное обеспечение (платформа), облегчающее разработку и объединение компонентов большого программного проекта. Фреймворк Django - программное обеспечение для веб-приложений на языке Python. 2. Зачем нужны фреймворки. Фреймворк— заготовка, готовая модель для быстрой разработки проектов. Задает структуру, правила и предоставляет набор инструментов для создания проекта. В основном используется в веб-разработке сайтов и интернет магазинов. Позволяет правильно выстроить бизнес-логику. Особенности Django: Востребованность. Работает в большинстве компаний: Instagram, Disqus, Mozilla, The Washington Times, Pinterest, National Geographic, Яндекс.Практикум. Популярность в сообществе свободного программного обеспечения. Фреймворк стал стремительно разв
Оглавление
Решение заданий курса в ссылках конспекта
Решение заданий курса в ссылках конспекта

1. Фреймворк Django.

Авторы: веб-разработчики Адриан Головати и Саймон Уиллисон (США). Первый публичный релиз в 2008г. Название: в честь французского гитариста-виртуоза Джанго Рейнхардта.

Фреймворк (с англ. framework — «каркас, структура») - программное обеспечение (платформа), облегчающее разработку и объединение компонентов большого программного проекта. Фреймворк Django - программное обеспечение для веб-приложений на языке Python.

2. Зачем нужны фреймворки.

Фреймворк— заготовка, готовая модель для быстрой разработки проектов. Задает структуру, правила и предоставляет набор инструментов для создания проекта. В основном используется в веб-разработке сайтов и интернет магазинов. Позволяет правильно выстроить бизнес-логику.

Особенности Django:

Востребованность. Работает в большинстве компаний: Instagram, Disqus, Mozilla, The Washington Times, Pinterest, National Geographic, Яндекс.Практикум.

Популярность в сообществе свободного программного обеспечения. Фреймворк стал стремительно развиваться усилиями волонтёров. В настоящее время сообщество Django включает тысячи разработчиков из многих стран мира.

Расширяемость. Дорабатывается и расширяется с помощью библиотек и плагинов (модулей, позволяющих быстро добавить на сайт нужную функцию).

Административная панель Django. Автоматически генерируется при создании приложения. Это избавляет разработчика от необходимости создавать «админку» вручную.

Взаимодействие с базами данных. Осуществляется через инструмент Django ORM, благодаря которому все запросы к базе данных SQL пишутся прямо на Python.

3. Как устроены проекты? Проекты состоят из приложений.

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

4. Запуск проекта в тренажёре. Settings.

Онлайн-тренажер Django - программное средство обучения. Код в Django запускается только на сервере. Загрузка и запуск кода на сервере называется deploy.
После запуска проекта в тренажёре появится сформированный Django веб-адрес {URL}, по которому запущенный проект будет доступен в интернете. Этот адрес не постоянный в процессе разработки он может изменяться от задачи к задаче. В теории и заданиях он обозначается символами
{URL} - Uniform Resource Locator (Единый указатель ресурса).

Тренажёр Django в Яндекс.Практикум
Тренажёр Django в Яндекс.Практикум

Отображение стандартной страницы Django в браузере пользователя по скопированному адресу {URL} из тренажёра:

-3

Файловая структура. В этой области тренажёра добавляются папки и файлы проекта.

Рис.1 Файловая структура стандартного исходного проекта
Рис.1 Файловая структура стандартного исходного проекта

anfisa4friends – произвольное название папки Django-проекта в тренажере.

manage.py – корневой файл для установки дополнительных библиотек, создание приложений, регистрации пользователей из командной строки. В тренажёре не используется.

urls.py – файл для хранения списка всех доступных веб-адресов (URL) проекта.

settings.py (или конфиг)– файл для настройки прав доступа, подключение библиотек, языка сайта, регистрации приложений и других глобальных настроек проекта.

Редактор кода файлов. В этой области пишется код файлов и редактируются настройки проекта.

Языковые настройки выполняются в setting. ру (конфиге).
Setting.ру
→ LANGUAGE_CODE = ‘en’ - английский язык:

Настройка стандартной страницы на английском
Настройка стандартной страницы на английском

Setting.ру → LANGUAGE_CODE = ‘ru’ - русский язык:

Настройка стандартной страницы на русском
Настройка стандартной страницы на русском

Терминал - окно для вывода служебной информации и сообщений об ошибках запущенного проекта.

5. Проект Anfisa4friends. Наполнение проекта.

Стандартный исходный проект в тренажере Django назван Anfisa4friends - это пустая заготовка. Для его наполнения необходимо сначала зарегистрировать (или подключить) приложение, т.е. просто добавить его название в файл конфиг: setting.ру → INSTALLED_APPS→ "homepage":

Регистрация приложения в конфиг
Регистрация приложения в конфиг
Файловая структура после регистрации первого приложения
Файловая структура после регистрации первого приложения

После регистрации первого приложения в тренажере создаётся новая папка homepage и файл views.ру с кодом, содержащим текст приветствия: return HttpResponse('Anfisa for Friends -- Hello, world! -- ¯\(°:°)/¯'):

Файл views.ру приложения homepage с приветствием для главной страницы
Файл views.ру приложения homepage с приветствием для главной страницы

Отображение главной страницы в браузере под управлением зарегистрированного приложения homepage, а не под управлением стандартного кода Django:

-10

6. URLs и VIEWs. Относительные URLs. Шаблоны URLs.

URLs - Uniform Resource Locators (от англ. «единые указатели ресурса» или «единообразные определители местонахождения ресурса» или веб-адреса интернет ресурса). Каждый ресурс (сайт и страница) имеют в интернете свой уникальный URL или веб-адрес:

-11

Веб-адреса всех страниц начинаются с названия протокола http (или https) и имени домена (домен, главная страница, головной домен, главный домен - это одно и тоже далее в тексте):

-12

Абсолютные URL - полные адреса с указанием протокола и домена. Относительные URL - адреса без указания протокола и домена:

Примеры веб-адресов. Относительный адрес страницы подразумевает, что эта страница находится в пределах одного главного домена.
Примеры веб-адресов. Относительный адрес страницы подразумевает, что эта страница находится в пределах одного главного домена.

Относительные адреса удобны тем, что проект можно разместить на любом домене, не изменяя код, поскольку имя домена в коде не упоминается. А если надо указать, то за адрес домена принимаются пустые кавычки «''» . Например в коде: path('', home_views.index) пустые кавычки это путь к главной странице.

Местом хранения относительных URLs является список urlpatterns в файле urls.py. В этот список включается также имя функции отображения содержимого по адресу URL. Такая пара «адрес – функция отображения» называется шаблоном (образцом) веб-адреса. Например: path('', home_views.index) - это элемент списка «urlpatterns» с шаблоном: имя главной страницы «''» и имя функции «home_views.index». Другими словами строка path('', home_views.index) – это маршрут к шаблону отображения главной страницы. Перечисление пар «адрес – функция» - это и есть список urlpatterns (от англ. patterns-шаблоны). Этот список создаётся переменной urlpatterns и функцией path. Пример такого списка:

Пример списка urlpatterns. Где: path - функция из каталога модулей Django для обработки шаблонов URL, urlpatterns - название переменной
Пример списка urlpatterns. Где: path - функция из каталога модулей Django для обработки шаблонов URL, urlpatterns - название переменной

Формирование списка urlpatterns выполняется импортом функции path из каталога django.urls и файла views.ру из приложения проекта.

urlpatterns пустого проекта Anfisa4friends:

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

urlpatterns после регистрации первого приложения homepage:

Заполненный urlpatterns. Path в этом списке указывает на отображение главной страницы из файла homepage/views.ру.
Заполненный urlpatterns. Path в этом списке указывает на отображение главной страницы из файла homepage/views.ру.

VIEWs - это view-функции, которые обрабатывают запрос и находятся в файлах views.ру. Они получают на вход данные из запроса (объект request), а возвращают ответ (объект HttpResponse). Такие функции называют view-функциями или функциями представления (англ. view «вид, отображение, представление») В российском Django-сообществе распространён перевод «представление».

При открытии ссылки {URL} в браузере пользователя (клиента), возникший запрос HTTP Request будет получен и проверен сервером по запрошенному URL в файле urls.py, где строка path('', home_views.index) вызовет функцию def index(request) в файле views.ру , соответствующую адресу главной страницы(''). Функция def index(request) обработает запрос и вернёт ответ пользователю: HttpResponse('Anfisa for Friends -- Hello, world! -- ¯\(°:°)/ :

Логика обработки запроса к главной странице в проекте Django
Логика обработки запроса к главной странице в проекте Django

Для дальнейшей работы с проектом осталось поменять приветствие главной страницы на русский язык в объекте ответа HttpResponse:

Рис.2

Рис.2 Файл homepage/views.ru с русским текстом приветствия для главной страницы
Рис.2 Файл homepage/views.ru с русским текстом приветствия для главной страницы

Представление главной страницы с русским текстом приветствия в браузере пользователя

-19

7. Больше адресов! Команда Include

Для удобства разработки проектов все доступные адреса URLs разбиты по своим приложениям и там находятся. А в головном URLs (anfisa4friends/urls.py) хранятся только указания на имена приложений со своими списками адресов. Задачей команды include и является указать на имена этих приложений, т.е. включить файлы адресов urls.py приложений в головной urls.py. Эта команда определяет так называемые вложенные маршруты для использования одних urlpatterns в других.

Для каждого приложения создается свой файл urls.ру:

Список URLs приложения homepage
Список URLs приложения homepage

Команда include включает urls.py приложения в головной urls.py:

Головной URLs с включенным в него URLs приложения homepage
Головной URLs с включенным в него URLs приложения homepage

Логика обработки запроса после команды include:

Логика обработка запроса c вложенными маршрутами urls.
Логика обработка запроса c вложенными маршрутами urls.

8. Время icecream. Импорт. Первое испытание.

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

1)Регистрация в проекте приложения icecream:

Добавление в конфиг второго приложения
Добавление в конфиг второго приложения

2)Создание вложенного маршрута в головном urlpatterns к адресам приложения icecream:

Головной urlpatterns с двумя вложенными маршрутами
Головной urlpatterns с двумя вложенными маршрутами

3)Создание urlpatterns приложения icecream:

Рис.3

Рис.3 urlpatterns приложения icecream
Рис.3 urlpatterns приложения icecream

4)Создание view-функции def icecream_list (request), возвращающую фразу 'Здесь будет список сортов мороженого ':

View-функция страницы icecream для получения фразы: Здесь будет список сортов мороженого
View-функция страницы icecream для получения фразы: Здесь будет список сортов мороженого

5)Результат работы приложения icecream, который пока можно увидеть дописыванием /icecream/ к скопированному {URL} в браузере:

Инструкция для импорта файлов и их объектов записывается в формате: from .<адрес папки/файла.ру > import <файл.ру/объект в файле.ру>, где символ точка «.» сразу после from означает текущую директорию, в которой выполняется импорт.

-28

Импорт из каталога Django в исполняемый код работает по такому же принципу как импорт из библиотек Python:

-29

9. Models: почти база данных

Для обещанного выше списка сортов мороженого в приложении icecream создается файл models.ру, который содержит icecream_db - это «почти база данных» или список сортов мороженого:

Файловая структура приложения icecream
Файловая структура приложения icecream

Путь к базе: icecream → models.ру → icecream_db. Почему «почти база данных», потому что это простейшая база данных, состоящая из списка словарей, где признаком списка является квадратные скобки [ ], а признаком словаря фигурные скобки { }:

Структура списка сортов мороженого icecream_db с его элементами (словарями). В каждом словаре два ключа name и description и их значения соответственно: названиеN (сорт мороженого) и описаниеN (состав мороженого).
Структура списка сортов мороженого icecream_db с его элементами (словарями). В каждом словаре два ключа name и description и их значения соответственно: названиеN (сорт мороженого) и описаниеN (состав мороженого).

Код «почти база данных» с правилами оформления кода представляет понятный хорошо читаемый текст:

Фрагмент кода «почти базы данных» сортов мороженого. Правила оформления кода: максимальная длина строки ограничивается 79-ю символами (комментарии 72-я символами), разбиваемая строка заключается в общие скобки, в каждой строке фрагмент текста обрамляется в кавычки, перенос строки делается только после пробела, отступы соблюдаются в каждой строке.
Фрагмент кода «почти базы данных» сортов мороженого. Правила оформления кода: максимальная длина строки ограничивается 79-ю символами (комментарии 72-я символами), разбиваемая строка заключается в общие скобки, в каждой строке фрагмент текста обрамляется в кавычки, перенос строки делается только после пробела, отступы соблюдаются в каждой строке.

Код файла views.ру для отображения «почти базы данных» или списка сортов мороженого:

Рис. 4 Код view.ру с view-функцией представления полного списка сортов мороженного
Рис. 4 Код view.ру с view-функцией представления полного списка сортов мороженного

Результат работы кода файла icecream/views.ру по выводу списка мороженого в браузере:

-34

Информацию по частям из вышеприведённого списка получают с помощью индекса, а из словаря с помощью ключа в def icecream_list():

1) Код для вывода первого элемента списка по индексу [0]:

Рис. 5 Код view-функции для получения информации по индексу [0] - о первом элементе списка сортов мороженого. Для списков индекс первого элемента - это [0], для второго [1] и т.д.
Рис. 5 Код view-функции для получения информации по индексу [0] - о первом элементе списка сортов мороженого. Для списков индекс первого элемента - это [0], для второго [1] и т.д.

Результат вывода частичной информации по индексу [0] для первого элемента списка мороженого:

-36

2) Код для вывода по ключу словаря "description" второго элемента списка мороженного с описанием сорта, но без его названия:

Рис.6 Код view-функции для вывода информации по одному ключу "description"- только описания второго элемента списка с индексом[1]
Рис.6 Код view-функции для вывода информации по одному ключу "description"- только описания второго элемента списка с индексом[1]

Результат вывода по ключу словаря "description" второго элемента списка с описанием мороженного без его названия:

-38

3) Код для вывода только названий мороженого по ключам словаря "name":

Рис.7

Рис. 7 Файл icecream/views.ру c кодом view-функции для вывода только названий мороженого
Рис. 7 Файл icecream/views.ру c кодом view-функции для вывода только названий мороженого

Результат вывода только названий мороженого:

-40

При открытии страницы мороженого view-функция def icecream_list(request) получает данные из файла models.ру и отправляет их клиенту:

Логика обработки запроса к странице /icecream/
Логика обработки запроса к странице /icecream/

10. Основы HTML. Теги и HTML-файлы.

При запросе к определённому URL, сервер возвращает пользователю форматированную текстовую строку. Форматирование текста заключается в изменении его вешнего вида для удобства чтения. Выполняется с помощью структурирования — это разбиение текста на отдельные значащие фрагменты (абзацы, заголовки, списки и цитаты). Структурирование текста реализуется программным языком HTML - Hyper Text Markup Language (англ. «язык разметки гипертекста»). Разметка информации на странице выполняется тегами, которые обозначаются треугольными скобками, внутри которых указывается название тега и необязательные атрибуты: < имя_тега [атрибуты]>. Парные теги оборачивают информацию, а одиночные нет:
<имяТега>Оборачиваемое содержимое</имяТега> - это парный тег

<имяТега> - это одиночный тег.

Примеры используемых тегов:

Рис. 8 Теги HTML
Рис. 8 Теги HTML

Подготовка двух HTML-файлов для главной страницы и для страницы с мороженым:

Файл главной страницы сайта традиционно называют index. Для него подготовлен HTML-файл index.html, который заполнен информацией с тегом заголовка проекта, картинкой и ссылкой к списку мороженного:

Рис.9

Рис. 9 Файл index.html с одним заголовком, картинкой и ссылкой к списку мороженного
Рис. 9 Файл index.html с одним заголовком, картинкой и ссылкой к списку мороженного

Для страницы мороженого подготовлен HTML-файл icecream-list.html, в котором два заголовка, статичный список мороженого и ссылка на главную страницу:

Рис.10

Рис. 10 Код icecream-list.html с двумя заголовками, статичным списком мороженного и ссылкой на главную страницу
Рис. 10 Код icecream-list.html с двумя заголовками, статичным списком мороженного и ссылкой на главную страницу

11. Templates. Подключение шаблонов. HTML-шаблоны

Для удобства разработки проектов HTML-код хранится не в view-функциях, а отдельно в HTML-файлах (шаблонах). Для HTML-шаблонов создается корневая папка Templates, в которой находятся папки с названиями приложений проекта и относящиеся к этим папкам HTML-файлы. Эти файлы, подготовленные в предыдущем разделе теперь будут называться HTML-шаблонами. Файловая структура на этом этапе имеет следующий вид:

Рис. 11 Файловая структура с HTML-шаблонами
Рис. 11 Файловая структура с HTML-шаблонами

В HTML-шаблонах папки Templates собираются данные, подготовленные view-функциями. После «сборки» в шаблоне готовые страницы отправляется клиенту:

Логика обработки запросов к двум страницам. HTML-шаблоны главной страницы и страницы мороженного находятся в папке Templates, а соответствующие им view-функции в файлах views.ру. Веб-адреса головного файла и файла приложений расположены в URLS.
Логика обработки запросов к двум страницам. HTML-шаблоны главной страницы и страницы мороженного находятся в папке Templates, а соответствующие им view-функции в файлах views.ру. Веб-адреса головного файла и файла приложений расположены в URLS.

Django Templates - инструмент для работы с шаблонами. Он подключен в константе TEMPLATES файла setting.ру:

Рис. 12 Код константы TEMPLATES  для поиска HTML-шаблона
Рис. 12 Код константы TEMPLATES для поиска HTML-шаблона

12. Передаем информацию в шаблон. Функция render() и словарь context{}

Для передачи информации в шаблон view-функции Django используют функцию render() и словарь context{}. Функция render() (англ. визуализация), возвращает объект HttpResponse, который содержит код HTML-страницы, собранной из HTML-кода шаблона и данных, переданных в него из view-функции. Словарь context (англ. «смысл») - так называют обычный словарь dict{} с данными, которые надо поместить в шаблон.

В функции render() обязательны только два аргумента: request и адрес HTML-шаблона. Словарь с данными context можно и не передавать, код отработает и без словаря.

В этом разделе необходимо отредактировать две предыдущие view-функции и два подготовленных ранее шаблона с учетом render() и context:

1) В файле homepage/views.ру(Рис.2) надо импортировать функцию render и использовать её вместо HttpResponse. Функция render() нужна для создания возвращаемой страницы, в которой собраны воедино данные и HTML-шаблон. В render() словарь context не передаётся, поскольку его пока нет:

Рис.13

Рис. 13 Код файла homepage/views.ру с функцией render. Изменение в Рис.2
Рис. 13 Код файла homepage/views.ру с функцией render. Изменение в Рис.2

2) В файле index.html(Рис.9) надо изменить адрес ссылки в шаблоне index.html на "/icecream/", т.к. список мороженного теперь находится именно по этому адресу (вместо ссылки на артефакт icecream-list.html ):

Рис.14

Рис.14 Код index.html после изменения ссылки в рис.9
Рис.14 Код index.html после изменения ссылки в рис.9

3) В файле icecream/views.ру (Рис.7) с только названиями мороженного надо вывести названия построчно без разделителя :: и добавить тег <br> (перенос строки), а также создать словарь context и использовать render():

Рис.15

Рис.15 Код icecream/views.ру после редактирования в Рис.7. В render передается объект request, адрес шаблона icecream/icecream-list.html и словарь context, из которого список мороженого будет выведен в HTML-шаблон.
Рис.15 Код icecream/views.ру после редактирования в Рис.7. В render передается объект request, адрес шаблона icecream/icecream-list.html и словарь context, из которого список мороженого будет выведен в HTML-шаблон.

4) В файле icecream-list.html(Рис.10) надо заменить адрес ссылки с "index.html" на главную страницу "/", далее удалить статичный список мороженого и вывести список мороженного уже из словаря context рисунка 15:

Рис.16 Код шаблона icecream-list.html после редактирования кода в Рис.10 и представление страницы мороженого.
Рис.16 Код шаблона icecream-list.html после редактирования кода в Рис.10 и представление страницы мороженого.

Результатом передачи информации в шаблон является отображение всего списка названий мороженого из «почти базы данных» и связь двух страниц между собой через ссылки <a href="Веб-адрес"></a>.

13. Отдельная страница для сорта мороженого. Выражение <int:pk>

Для представления отдельной страницы сорта мороженого добавляется ещё один новый HTML-шаблон icecream-detail.html в папку Templates и используется переменная в веб-адресе шаблона urlpatterns приложения icecream:

Структура папки Templates с новым HTML-шаблоном
Структура папки Templates с новым HTML-шаблоном
Элемент списка urlpatterns c переменной в паре «адрес – функция»
Элемент списка urlpatterns c переменной в паре «адрес – функция»

Выражение <int:pk> устанавливает переменную в адресе urlpatterns, где pk ( primary key, «первичный ключ») - общепринятое имя для переменных, в которых передаётся индекс объекта. В нашем случае это индекс из списка мороженного и он уникальным образом определяет каждый словарь в базе данных icecream_db. А запись с int: <int:pk> означает, что Django ожидает целочисленное значение и преобразует его в переменную pk. Тогда строка в urlpatterns : path('<int:pk>/', views.icecream_detail) указывает на то, что переменная pk передается во view-функцию и данные будут сформированы на ее основе. При таком подходе можно обойтись одним path(), одной view-функцией и одним HTML-шаблоном для всех словарей нашей «почти базы данных». С учетом вышеизложенного редактируются urlpatterns, view-функция и HTML-шаблон в приложении icecream:

1) В файле icecream/urls.ру(Рис.3) в списке urlpatterns добавляется шаблон с переменной pk в адресе:

Рис.17

Рис.17 Список urlpatterns с добавленной второй строкой path и переменной в адресе этого шаблона
Рис.17 Список urlpatterns с добавленной второй строкой path и переменной в адресе этого шаблона

2) В файле icecream/views.ру(Рис.15) добавляется вторая view-функция def icecream_detail(request, pk) с переменной pk:

Рис.18

Рис.18 Код файла icecream/views.ру с добавленной View-функцией def icecream_detail() и переменной pk, с новым содержимым словаря context и новым шаблоном icecream-detail.html в render(). (Изменение кода рис.15)
Рис.18 Код файла icecream/views.ру с добавленной View-функцией def icecream_detail() и переменной pk, с новым содержимым словаря context и новым шаблоном icecream-detail.html в render(). (Изменение кода рис.15)

3) Создаётся новый HTML-шаблон icecream-detail.html для вывода отдельной страницы сорта мороженного из словаря context функции def icecream_detail(request, pk) рисунка 18:

Рис.19

Рис.19 Код HTML-шаблона icecream-detail.html для отдельной страницы сорта мороженного. Ссылка <a href="../"> это тоже, что и ссылка <a href="/icecream/">
Рис.19 Код HTML-шаблона icecream-detail.html для отдельной страницы сорта мороженного. Ссылка <a href="../"> это тоже, что и ссылка <a href="/icecream/">

4) В файле icecream/views.py(Рис.18) необходима навигация по сортам мороженого, что означает превращение каждого названия мороженого в ссылку, при клике на которую можно было перейти на страницу с подробной информацией об этом мороженом. Реализуется всё это парным тегом внутри которого находится относительная ссылка на каждое название мороженного в строке функции def icecream_list(request):

Редактирование верхней строки
Редактирование верхней строки
Фрагмент кода icecream/views.py с добавленной ссылкой на каждый сорт мороженного. Изменение кода def icecream_list(request) в Рис.18
Фрагмент кода icecream/views.py с добавленной ссылкой на каждый сорт мороженного. Изменение кода def icecream_list(request) в Рис.18

В итоге: представление главной страницы, страницы списка мороженого и отдельной страницы для сорта мороженого выполняется соответственно следующими view-функциями: def index(request), def icecream_list(request) и def icecream_detail(request ). HTML-шаблоны для этих view-функций: index.html, icecream-list.html и icecream-detail.html. View-функции двух страниц мороженого расположены в файле icecream/views.ру. В проекте работают два приложения и три страницы. Представление всех страниц и связи между ними на этом этапе разработки проекта:

-59

14. Совместная работа приложений.

Совместная работа - это когда список мороженного из одного приложения icecream, а список друзей из другого нового приложения anfisa и все это на одной странице /homepage/, которой будет управляет третье приложение homepage. С учетом изменившихся правил работы проекта, добавляется новое приложение anfisa, редактируются предыдущие view-функции и удаляются ненужные элементы кода:

1) Регистрация нового приложение anfisa со списком друзей (models.ру), которое включается в файловую структуру проекта:

Файловая структура проекта с приложением anfisa
Файловая структура проекта с приложением anfisa
Регистрация приложения anfisa
Регистрация приложения anfisa

2) Вывод на главную страницу списка названий мороженого. В файле homepage/views.ru(Рис.13) импортируется словарь icecream_db из icecream/models.ру, а view-функция index(request) главной страницы настраивается так, чтобы она вывела список названий мороженого и ссылку «Узнать состав» рядом с каждым названием. Теперь в render() для главной страницы располагается и список мороженного в context, а не только один шаблон index.html как раньше:

Рис.20

Рис.20 Код файла homepage/views.ru со списком названий мороженого и ссылкой 'Узнать состав' (Изменение кода в рис.13). Код HTML-шаблона главной страницы с выводом списка мороженого.
Рис.20 Код файла homepage/views.ru со списком названий мороженого и ссылкой 'Узнать состав' (Изменение кода в рис.13). Код HTML-шаблона главной страницы с выводом списка мороженого.

3) Вывод на главную страницу списка имен друзей. В файле homepage/views.ru(Рис.20) импортируется словарь друзей friends_db из приложения anfisa. В функцию def index(request) добавляется ещё один цикл по перебору словаря friends_db и создается переменная friends, в которой будут храниться имена друзей, разделённые HTML-тегом <br>. В render() список друзей выводится из context в шаблон главной страницы index.html:

Рис.21

Рис.21 Код файла homepage/views.ru со списком имён друзей и код HTML-шаблона  главной страницы для вывода списка имён друзей. Изменение кодов в Рис.20
Рис.21 Код файла homepage/views.ru со списком имён друзей и код HTML-шаблона главной страницы для вывода списка имён друзей. Изменение кодов в Рис.20

4) После переноса списка сортов мороженого на главную страницу /homepage/, страница /icecream/ потеряла свою актуальность. Пришло время удалить из кода все упоминания о странице /icecream/ в Рис.17, Рис.18, Рис.19 :

Рис.22

Рис.22 Изменение в коде Рис.17. Удаление строки в urls.py приложения icecream, вызывающую функцию icecream_list().
Рис.22 Изменение в коде Рис.17. Удаление строки в urls.py приложения icecream, вызывающую функцию icecream_list().

Рис.23

Рис.23 Изменение в коде Рис.18. Удаление view-функции icecream_list() в файле icecream/views.ру .
Рис.23 Изменение в коде Рис.18. Удаление view-функции icecream_list() в файле icecream/views.ру .

Рис.24

Рис.24 Изменение в коде Рис.19. Удаление  ссылки <a href="../">Вернуться к списку</a> и тега <br> перед ней в HTML-шаблоне отдельной страницы сорта мороженого.
Рис.24 Изменение в коде Рис.19. Удаление ссылки <a href="../">Вернуться к списку</a> и тега <br> перед ней в HTML-шаблоне отдельной страницы сорта мороженого.

5) Удаление артефакта icecream-list.html из файловой структуры:

-67

Результат совместной работы приложений - это вывод на одну главную страницу и списка названий мороженого и списка имён друзей. На этом этапе разработки проекта работают три приложения и две страницы. Представление главной страницы и отдельной страницы сорта мороженого выполняется соответственно view-функциями: def index() и def icecream_detail( ). HTML-шаблоны этих функций: index.html и icecream-detail.html. В файле icecream/views.ру располагается одна view-функция def icecream_detail( ). Код HTML-шаблона для главной страницы с выводом списков мороженого и друзей:

Код шаблона главной страницы (homepage/index.html) с выводом на главную страницу двух списков: списка сортов мороженого и списка имён друзей.
Код шаблона главной страницы (homepage/index.html) с выводом на главную страницу двух списков: списка сортов мороженого и списка имён друзей.

15. Релиз: Бизнес-логика.

Постановка задачи: получить название города по имени друга и определить погоду в городе, где он проживает.

1) Для решения этой задачи в приложении anfisa создается файл services.py (сервис) с готовой служебной функцией what_weather(), которая определяет погоду:

Файловая структура приложения anfisa с сервисом
Файловая структура приложения anfisa с сервисом
Код сервиса
Код сервиса

2) Редактируется файл homepage/views.py(Рис.21) с учётом определения погоды в городе друга (импортируется функция погоды → определяется город друга → город передаётся в функцию погоды → функция погоды выдаёт сведения о погоде → в переменной friends собираются друг, город и погода в одной строке → эта строка через context передаётся в шаблон index.html):

Рис.25

Рис.25 Код представления главной страницы с друзьями, городами, погодой и мороженым. Код HTML-шаблона главной страницы, выводящий эту информацию для представления Релиз:бизнес-логики.
Рис.25 Код представления главной страницы с друзьями, городами, погодой и мороженым. Код HTML-шаблона главной страницы, выводящий эту информацию для представления Релиз:бизнес-логики.

16. POST-запросы. Веб-форма <form>, элемент <input> и кнопки.

Постановка задачи: дать возможность пользователю отправить на сервер информацию о том, какого друга и каким мороженым он хочет его угостить. Для её решения в проекте применяются POST-запросы (post (англ.) -посылать), которые анализируются в кодах view-функции и в HTML-шаблонах приложения homepage. Там же размещаются и коды кнопок формирования такого типа запроса.

POST-запросы отправляются для изменения или сохранения данных на сервере. GET-запросы (get (англ.- получать) отправляются только для получения страницы или информации от сервера. POST-запросы используются при регистрации на каком-либо сайте, при создании и редактировании сообщений в соцсетях, при покупках в интернете и т.д. Для отправки данных через POST-запросы используются веб-форма <form> и элемент веб-формы <input> с элементами интерфейса:

<form атрибуты> ... </form> - это Веб-форма (<form>), обозначается парным тегом формы. Дает пользователю возможность отправлять на сервер данные прямо с веб-страницы.

<input атрибуты> - это элемент формы (<input>), обозначается одиночным тегом. Предназначен для создания элементов интерфейса: текстовых полей, различных кнопок, переключателей и флажков. Элемент <input> не требуется помещать внутрь контейнера <form>, но если введенные пользователем данные должны быть отправлены на сервер, то присутствие <form> обязательно. Элемент интерфейса radio button или радиокнопка, используется как переключатель при выборе одного единственного варианта из нескольких предложенных. Тег радиокнопки: <input type="radio" name="имя" атрибуты>. Элемент интерфейса submit кнопка (англ."submit"‒отправить) используется для отправки веб-формы. Тег кнопки submit: <input type="submit" value="надпись на кнопке">

Код кнопки submit находится в HTML-шаблоне файла homepage/index.html, а коды радиокнопок расположены во view-функции def index(request) файла homepage/views.ру нашего проекта:

Код радиокнопки выбора друга в def index(request)
Код радиокнопки выбора друга в def index(request)
Код радиокнопки выбора мороженного в def index(request)
Код радиокнопки выбора мороженного в def index(request)

Финальный код HTML-шаблона главной страницы c веб-формой <form>, с Post-запросом к главной странице "/" и submit-кнопкой:

Рис. 26

Рис.26 Финальный код HTML-шаблона главной страницы в разработанном проекте.
Рис.26 Финальный код HTML-шаблона главной страницы в разработанном проекте.

POST-запрос указывается как в веб-форме HTML-шаблона так и в view-функции index(request) главной страницы:

Анализ POST-запросов в файле homepage/views.py и отправка данных от них в HTML-шаблон главной страницы.
Анализ POST-запросов в файле homepage/views.py и отправка данных от них в HTML-шаблон главной страницы.

Представление главной страницы с учётом Post-запросов и кнопок:

Результат работы POST-запросов с кликами по радиокнопкам "Антон", "Фруктово-ягодное мороженное ГОСТ 119-52" и submit-кнопке "Угостить"
Результат работы POST-запросов с кликами по радиокнопкам "Антон", "Фруктово-ягодное мороженное ГОСТ 119-52" и submit-кнопке "Угостить"

17. Анфиса, будь человеком!

Постановка задачи: дать возможность Анфисе давать рекомендации пользователю лакомиться мороженым или нет в зависимости от погоды.

Парсинг (от англ. parse) это поиск данных извлечение данных → сохранение данных. Распарсить - извлечь нужную информацию из строки str. Выполняется в def what_temperature(weather), где извлекается числовое значение температуры в строке weather, полученной из функции погоды. Пример извлечения -12 для значения weather = '☀️ 🌡️-12°C 🌬️→6.1m/s':

Иллюстрация извлечения распарсенной температуры в файле anfisa/services.ру
Иллюстрация извлечения распарсенной температуры в файле anfisa/services.ру

Схема кода для получения числового значения температуры (parsed_temperature) на главной странице:

Схема кода для представления числового значения температуры.
Схема кода для представления числового значения температуры.

Представление главной страницы с числовым значением температуры:

Представление числового значения температуры на главной странице с кликами по кнопкам "Антон", "Фруктово-ягодное мороженое ГОСТ 119-52" и "Угостить"
Представление числового значения температуры на главной странице с кликами по кнопкам "Антон", "Фруктово-ягодное мороженое ГОСТ 119-52" и "Угостить"

Создание def what_conclusion(parsed_temperature). Эта функция рекомендации другу находится в сервисе папки anfisa:

Код функции def what_conclusion(parsed_temperature) для рекомендаций друзьям.
Код функции def what_conclusion(parsed_temperature) для рекомендаций друзьям.

Окончательная схема кодов для представления главной страницы с фразой рекомендацией другу, выбранным именем друга, названием города друга, погодой в этом городе и сортом выбранного мороженого:

Окончательная схема кода для представления главной страницы
Окончательная схема кода для представления главной страницы

Финальное представление главной страницы проекта Anfisa4friends в браузере с рекомендацией и другими сообщениями для пользователя:

Финальное представление главной страницы проекта с кликами по кнопкам "Лера", Томатное мороженое" и "Угостить" в браузере пользователя.
Финальное представление главной страницы проекта с кликами по кнопкам "Лера", Томатное мороженое" и "Угостить" в браузере пользователя.

К конспекту Python →