Модели, виды и шаблоны

На традиционном веб-сайте, управляемом данными, веб-приложение ожидает HTTP-запросов от веб-браузера (или другого клиента). Когда запрос получен, приложение определяет, что необходимо, основываясь на URL-адресе и, возможно, информации в данных POST или GET. В зависимости от того, что требуется, он может затем читать или записывать информацию из базы данных или выполнять другие задачи, необходимые для решения запроса. Затем приложение возвращает ответ веб-браузеру, нередко динамически создавая HTML-страницу для отображения браузером, вставляя извлеченные данные в заполнители в шаблоне HTML.

Веб-приложения Django группируют код, обрабатывающий каждый из этих этапов в отдельные файлы:

1.Отправка запроса в нужное представление (urls.ru)

· URL-адрес: Обрабатываются запросы от каждого отдельного URL-адреса с помощью одной функции, удобнее написать отдельную функцию представления для обработки каждого ресурса. URL - сопоставитель используется для перераспределенияHTTP-запросов в соответствующее представление на основе URL-адреса запроса. Преобразователь URL также может соответствовать определенным шаблонам строк или цифр, появляющихся в URL, и передавать их в функцию представления в качестве данных.

· Представление — это функция обработки запросов, которая получает HTTP-запросы и отправляетHTTP-ответы. Представления получают доступ к данным, которые нужны для решения запросов через модели, и отправляют форматирование ответа шаблонам.

· Модели — это объекты Python, определяющие структуру данных приложения и предоставляющие механизмы для управления (изменения, удаления, добавления) и запроса записей данных.

· Шаблон — это текстовый файл, определяющий структуру или макет файла (например, HTML-страницу), с заполнителями, используемыми для представления фактического содержимого. Представление может динамически создавать HTML-страницу, используя шаблон HTML, заполняя ее данными из модели. Шаблон может быть использован для определения структуры любого типа файла; это не обязательно должен быть HTML!

Преобразователь URL хранится в файле с именем urls.py. В нижеприведенном примере mapper (urlpatterns) определяет список отображений между маршрутами (конкретными шаблонами URL) и соответствующими функциями просмотра. Если получен HTTP-запрос с URL-адресом, соответствующим указанному шаблону, то будет вызвана связанная с ним функция просмотра и передан запрос.

urlpatterns = [

путь ('admin /', admin.site.urls),

путь ('book / <int: id> /', views.book_detail, name = 'book_detail'),

путь ('catalog /', include ('catalog.urls')),

re_path (r '^ ([0-9] +) / $', views.best),

]

Объект urlpatterns представляет собой список функций path () и / или re_path () (списки Python определяются с помощью квадратных скобок, где элементы разделяются запятыми и могут иметь дополнительную запятую. Например: [item1, item2, item3, ]).

Первый аргумент обоих методов - это маршрут (шаблон), который будет сопоставлен. Метод path () использует угловые скобки для определения частей URL, которые будут захвачены и переданы в функцию представления в качестве именованных аргументов. Функция re_path () использует гибкий подход сопоставления с образцом, известный как регулярное выражение. Мы поговорим об этом в следующей статье!

Второй аргумент - это другая функция, которая будет вызываться при сопоставлении с шаблоном. Обозначение views.book_detail указывает, что функция называется book_detail () и может быть найдена в модуле с именем views (то есть внутри файла с именем views.py).

2.Обработка запроса (views.py)

Представления — это главное веб-приложения, принимающего HTTP-запросы от веб-клиентов и возвращающего HTTP-ответы. В промежутке они собирают другие ресурсы платформы для доступа к данным, шаблонам визуализации.

В нижеприведенном примере показана минимальная функция представления index. Как и все функции представления, он получает объект HttpRequest в качестве параметра (запроса) и возвращает объект HttpResponse. В этом наш ответ просто возвращает жестко запрограммированную строку.

# filename: views.py (функции просмотра Django)

из django.http импортировать HttpResponse

индекс def (запрос):

 # Получить HttpRequest - параметр запроса

 # выполнять операции, используя информацию из запроса.

 # Возврат HttpResponse

 вернуть HttpResponse («Привет из Джанго!»)

 

Определение моделей данных (models.py)

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

Листинг 2. Шаблон объявления.

# filename: models.py

из django.db импортировать модели

Класс команды (models.Model):

имя_группы = models.CharField (max_length = 40)

 

TEAM_LEVELS = (

(«U09», «До 09»),

(«U10», «до 10 лет»),

(«U11», «до 11 лет»),

... # список других командных уровней

)

team_level = models.CharField (max_length = 3, выбор = TEAM_LEVELS, поумолчанию= 'U11')

 

3.Запрос данных (views.py)

Модель Django предоставляет несложный API запросов для поиска в базе данных. Он может сопоставляться с несколькими полями одновременно, используя разные критерии (например, точный, без учета регистра, больше чем и т. Д.), И может поддерживать сложные операторы (например, вы можете указать поиск для команд U11, в которых есть команда имя, которое начинается с «Fr» или заканчивается на «al»).

Фрагмент кода показывает функцию представления (обработчик ресурсов) для отображения всех наших команд U09. Строка, выделенная жирным шрифтом, показывает как использовать API запроса модели для фильтрации всех записей, где поле team_level содержит именно текст «U09» (обратите внимание, как этот критерий передается функции filter () в качестве аргумента с именем поля и тип соответствия, разделенный двойным подчеркиванием: team_level__exact).

Листинг 3. Объявление представления.

## filename: views.py

изdjango.shortcuts импорт рендеринга

из.modelsimportTeam

индексdef (запрос):

list_teams = Team.objects.filter (team_level__exact = "U09")

context = {'youngest_teams': list_teams}

 

4.Возвратный рендер (запрос, /best/index.html, контекст)

Эта функция использует функцию render () для создания HttpResponse. Он отправляется обратно в браузер. Эта функция является ярлыком; он создает файл HTML, комбинируя указанный шаблон HTML и некоторые данные для вставки в шаблон (предоставляется в переменной с именем «context»).

5.Рендеринг данных (шаблоны HTML)

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

На каждой итерации шаблон отображает значение team_name каждой команды в элементе <li>.

## filename: best / templates / best / index.html

<! DOCTYPE html>

<html lang = "en">

<Голова>

<meta charset = "utf-8">

<title>Домашняястраница</ title>

</ HEAD>

<Тело>

 {% if youngest_teams%}

<UL>

 {% длякоманды в youngest_teams%}

<li> {{team.team_name}} </ li>

{% endfor%}

</ UL>

 {% else%}

<p> Нет доступных команд. </ p>

{% endif%}

</ Body>

</ Html

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: