HTML Diff
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>