0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Представления или views - главные составляющие веб-приложений на основе Django. Еще их называют джангистами или вьюхами. Приложение может не взаимодействовать с базой данных, может не использовать шаблоны, но views в нем будут обязательно - приложение должно как-то отвечать на запросы.</p>
1
<p>Представления или views - главные составляющие веб-приложений на основе Django. Еще их называют джангистами или вьюхами. Приложение может не взаимодействовать с базой данных, может не использовать шаблоны, но views в нем будут обязательно - приложение должно как-то отвечать на запросы.</p>
2
<p>В Django используются два вида представлений:</p>
2
<p>В Django используются два вида представлений:</p>
3
<ul><li>Представления-функции - view functions</li>
3
<ul><li>Представления-функции - view functions</li>
4
<li>Представления-классы - class based views</li>
4
<li>Представления-классы - class based views</li>
5
</ul><p>В одном проекте могут одновременно использоваться оба вида. И нельзя сказать, что один вид лучше другого по всем признакам. У обоих есть свои сильные и слабые стороны. В этом уроке разберем их подробнее.</p>
5
</ul><p>В одном проекте могут одновременно использоваться оба вида. И нельзя сказать, что один вид лучше другого по всем признакам. У обоих есть свои сильные и слабые стороны. В этом уроке разберем их подробнее.</p>
6
<h2>Представления-функции</h2>
6
<h2>Представления-функции</h2>
7
<p><strong>Представления-функции</strong>- простой, но мощный вид представлений. Это обычные функции, которые принимают на входе запрос - объект класса<a>HttpRequest</a>, и возвращают ответ - объект класса<a>HttpResponse</a>или ему подобных.</p>
7
<p><strong>Представления-функции</strong>- простой, но мощный вид представлений. Это обычные функции, которые принимают на входе запрос - объект класса<a>HttpRequest</a>, и возвращают ответ - объект класса<a>HttpResponse</a>или ему подобных.</p>
8
<p>Так как каждая функция представления получает полную информацию о запросе, ей одной решать, как этот запрос обрабатывать. Например, функция решает, как реагировать на методы HTTP и как обрабатывать параметры запроса:</p>
8
<p>Так как каждая функция представления получает полную информацию о запросе, ей одной решать, как этот запрос обрабатывать. Например, функция решает, как реагировать на методы HTTP и как обрабатывать параметры запроса:</p>
9
<p>Если представление - это обычная функция, к ней можно применять обычные декораторы. В Django есть несколько полезных. Вот один из них:</p>
9
<p>Если представление - это обычная функция, к ней можно применять обычные декораторы. В Django есть несколько полезных. Вот один из них:</p>
10
<p>Если такая view получит запрос с отличным от указанных методом, то автоматически будет сформирован ответ MethodNotAllowed (код 405).</p>
10
<p>Если такая view получит запрос с отличным от указанных методом, то автоматически будет сформирован ответ MethodNotAllowed (код 405).</p>
11
<p>View function просты концептуально и дают нам полный контроль над обработкой запроса. Это полезно, но заставляет каждый раз писать код вручную или подготавливать библиотеку декораторов, которые упрощают решение типичных задач.</p>
11
<p>View function просты концептуально и дают нам полный контроль над обработкой запроса. Это полезно, но заставляет каждый раз писать код вручную или подготавливать библиотеку декораторов, которые упрощают решение типичных задач.</p>
12
<h2>Представления-классы</h2>
12
<h2>Представления-классы</h2>
13
<p>Все представления этого вида наследуются от класса django.views.View. Так выглядит код в простейшем случае:</p>
13
<p>Все представления этого вида наследуются от класса django.views.View. Так выглядит код в простейшем случае:</p>
14
<p>Метод get здесь работает как view function. При этом на каждый запрос будет создан новый экземпляр этого класса. Поэтому мы смело можем объявлять в классе методы, которые по ходу выполнения запроса будут менять его состояние.</p>
14
<p>Метод get здесь работает как view function. При этом на каждый запрос будет создан новый экземпляр этого класса. Поэтому мы смело можем объявлять в классе методы, которые по ходу выполнения запроса будут менять его состояние.</p>
15
<p>Регистрируется представление-класс с помощью метода класса as_view. Выглядит регистрация так:</p>
15
<p>Регистрируется представление-класс с помощью метода класса as_view. Выглядит регистрация так:</p>
16
<p>Представления-классы хороши тем, что дают возможность легко переиспользовать поведение через наследование. Посмотрим на встроенный TemplateView из модуля django.views.generic.base в деле:</p>
16
<p>Представления-классы хороши тем, что дают возможность легко переиспользовать поведение через наследование. Посмотрим на встроенный TemplateView из модуля django.views.generic.base в деле:</p>
17
<p>Нам даже не пришлось наследовать класс. Мы просто использовали готовый - указали при регистрации имя шаблона. Но даже если бы мы унаследовали класс, чтобы передать шаблону данные, то нам бы пришлось переопределить лишь малую часть функциональности класса-предка:</p>
17
<p>Нам даже не пришлось наследовать класс. Мы просто использовали готовый - указали при регистрации имя шаблона. Но даже если бы мы унаследовали класс, чтобы передать шаблону данные, то нам бы пришлось переопределить лишь малую часть функциональности класса-предка:</p>
18
<p>Подобных базовых представлений Django содержит предостаточно. Также хорошо проработаны представления для отображения сущностей из базы данных: отображение списков записей, отображение отдельных записей в детализированной форме. Сказывается направленность Django на решение задач по разработке контентных сайтов.</p>
18
<p>Подобных базовых представлений Django содержит предостаточно. Также хорошо проработаны представления для отображения сущностей из базы данных: отображение списков записей, отображение отдельных записей в детализированной форме. Сказывается направленность Django на решение задач по разработке контентных сайтов.</p>
19
<p>Представления-классы хорошо подходят для решения повторяющихся задач, так как большая часть из них уже почти решена силами Django.</p>
19
<p>Представления-классы хорошо подходят для решения повторяющихся задач, так как большая часть из них уже почти решена силами Django.</p>