Step 2 (S-44788)

From Stepik Wiki
Jump to: navigation, search

Step on Stepik: https://stepik.org/lesson/14828/step/2

Step 2 (S-44788) 1.png

[00:00 - 00:15] итак мы переходим к следующему компонента фреймворка django контроллеров или как а то ноги в django views а как мы помним борк выбирают


[00:15 - 00:32] такой конкретный контроллер такая функция вьюшка будет отвечать за обработку а того или иного угла а соглашение django функция вьюшке это просто обычные


Step 2 (S-44788) 2.png

[00:32 - 00:47] функцией на языке python а на которую накладывается 2 а ограничение они принимают на вход объект а джанго теперь request и должны вернуть объект перес post


[00:47 - 01:06] а объект request response это удобный интерфейс для построения для взаимодействия с протоколом http для анализа параметров и заголовку внутренняя структура этой функции может быть произвольно а


[01:06 - 01:20] часто используются простые функции обычных которых ничего внутри нет в некоторых случаях внутри функции создается какой то класс и дальше использовать в качестве обработчика экземпляр класса


[01:20 - 01:37] это так называемые класс баязет us а мы пока остановимся на простейшем варианте когда девушка является просто обычной функцией которая принимает почтить перекос возвращает hd теперь response


[01:37 - 01:52] а такие функции по соглашению должны размещаться в файле usb


[01:52 - 02:08] а в каждом приложении есть такой файл и в этот файл должны размещаться все все вьюшке а когда их становится много вы можете разделить этот файл на несколько составных частей но при этом вы должны


[02:08 - 02:23] сами озаботиться импортом эти функции когда вы подключаете вьюшку а в контроллере от участия в йошку в роутере вы должны указать правильный файл из которого ее импортировать если вы


[02:23 - 02:40] импортируете по имени то функции должны быть файле views а давайте разберем пример здесь выразил простой пример а вьюшке посмотреть как она выглядит предполагается что


Step 2 (S-44788) 3.png

[02:40 - 02:59] вот такая обложка обрабатывают запросы вида вот такого вида blog post текст а id 123 то есть а предполагается что по такому урлу мы будем отдавать а текст


[02:59 - 03:15] некоторого некоторые записи в блоге некоторого поста идентификатор поста а передаются через get параметры мы видим что лотом дается через некоторое идентификатор


[03:15 - 03:33] итак функция принимает всего 1 аргумент это request request это объект класса джанго в степи http request смотрим что происходит дальше а здесь нас обработка исключения


[03:33 - 03:49] ну отлично то можно было не делать но правильно свои ошибки обрабатывать самостоятельно не пробрасывает ошибки а мы в объекта request получаем


[03:49 - 04:05] некоторые свойством обращаешься к свойству гет свойства содержат все get параметра которые были переданы в удобном виде в данном случае был передан на 1 год поэтому в свойствах будет держаться только


[04:05 - 04:22] мы вызываем метод get и получаем параметр по имени id соответственно а request ну соответственно вся вот эта конструкция вернет нам строчку 1 2 3 переменная the будет


[04:22 - 04:40] 1 2 3 а дальше когда мы получили этот параметр мы делаем вот такой вызов а позже мы разберем что это вызов модели то есть запрос к базе данных


[04:40 - 04:56] получаем некоторый объект а если а возникло исключение в данном случае исключение объект не найден мы выбрасываем другой исключения


[04:56 - 05:11] называется что теперь 404 это специальные а специальный класс которая позволяет джанги отдать ошибку 404 а вообще а


[05:11 - 05:30] это не стандартный способ если вы хотите вернуть какой то особый код ответа из вашей вьюшки например 404 вы должны сделать это руками то есть создать объект теперь способ передать туда нужный код а это особый случай специально специально исключение которое django понимает видимо потому что


[05:30 - 05:48] такие ситуации встречаются довольно часто ну хорошо если пост был найден это все не так важно у нас есть объект объект лучшим и мы должны вернуть объектов теперь с post то есть ответ мы создаем новый экземпляр


[05:48 - 06:04] передаем 1 позиционный аргумент это тело ответа данном случае тело ответа совпадает с текстом поста и указываем content type


[06:04 - 06:23] content type это соответственно заголовок content type которая будет в нашем ответе указываем текст потому что по умолчанию это будет текста что мы а мы хотим вернуть именно сырой текст поста ну допустим нам для чего ты это по на вот в общем то


[06:23 - 06:41] все что делает данная вьюшка еще раз подчеркнем важные моменты какие здесь есть вьюшка понимает объект класса теперь request


[06:41 - 07:00] с помощью его методов получает данные из get параметров дальше идет какая то бизнес логика в данном случае загрузка объекты в базу и в конце в юшка возвращает объектов через помц а


[07:00 - 07:15] вот собственно говоря все давайте посмотрим подробнее как а можно передавать параметры внутрь функцию существует 2 подхода


Step 2 (S-44788) 4.png

[07:15 - 07:31] ну они используются на самом деле а вместе это не 2 различных подхода существует 2 способа передачи 1 мы посмотрели это передача через get параметра то есть вот через какое то стринг 2 способ передачи


Step 2 (S-44788) 5.png

Step 2 (S-44788) 6.png

[07:31 - 07:50] эта передача через путь а очень часто в приложениях стараются делать а человекочитаемый урлы то есть чтобы их можно было легко прочитать а человеку чтобы не запоминать ip шники


[07:50 - 08:07] ну и на самом деле это еще для оптимизации внутри поисковых систем бумага вот если мы говорим про блоге зачастую урлы выглядит вот таким образом например блок


[08:07 - 08:25] post и здесь а либо идентификатора и бы чаще еще так называемый флаг флаг это текстовый обозначения поставь например всем привет


[08:25 - 08:43] а вот это типично для какого нибудь поста в блоге мы видим что 1 часть урла она обозначает приложение а на самом деле это не так важно но


[08:43 - 08:58] как правило по 1 слову для определяется приложения django приложение которое будет обрабатывать это зависит от того как в рот и сконфигурировать а во 2 части урла как правило определяется в юшка то есть конкретная функция а вот


[08:58 - 09:16] 3 часть урла она постоянно меняется фактически это параметр которое нужно передать а в вашу вьюшку вот это 2 способ передачи через а фрагмент угла каким образом это реализовано в джанге


[09:16 - 09:33] это называется захват параметров и а это реализовано в 2 файлах а с 1 стороны вашем роутере файле вы должны а в регулярном выражении явно указать что вы ожидаете какой то параметр например а


[09:33 - 09:48] давайте рассмотрим вот 1 road это road вида блок категории


[09:48 - 10:07] 10 здесь используется не шлак а то есть используется идентификатор а вроде мы видим регулярку которая соответствует вот этой части причем слово блок не очевидна а слог оно находится


[10:07 - 10:26] ты более высокого уровня то есть использовать директиву include а роутер приложение отвечает только за хвост в урлах и мы видим что до числа 10 указано вот такая инструкция но это выражение которое соответствует последовательности чисел


[10:26 - 10:45] важно что это регулярное выражение оно указано в круглых скобках а в круглых скобках указывается так называемый захват capture регулярных выражений это значит что при сопоставлении регулярки с урлом все что попадет внутрь этих круглых скобок оно будет захвачена


[10:45 - 11:03] переменная а просто указание круглых скобок захватывает их в позиционной перемены то есть по номеру 1 совпадение 2 совпадение и так далее а


[11:03 - 11:18] во 2 раунде мы видим более сложную конструкцию мы видим что используется также захват capture но при этом указывается имя вопрос п и в главы скобочках указано какой то рим это значит что переменная


[11:18 - 11:37] а патом тот же самый то есть э последовательность цифр а переменная будет захвачена а последнее цифру будет захвачена в переменной с именем пк ввод переменной они хранятся внутри движка регулярных выражений после того как


[11:37 - 11:57] захват произошел вы можете оттуда их извлечь итак в роутерах мы указываем регулярные выражения которые захватывают необходимые части урла с помощью круглых скобочек и соответственно они будут сохранены либо в позиционные переменной либо если указано конструкция вот такая вот


[11:57 - 12:16] вопрос п с именем то переменную с именем далее при вызове при вызове вьюшке если а в юшка была связана с вот таким урлом джанго будет передавать захваченной переменной в качестве дополнительных параметров


[12:16 - 12:31] мы говорили что по соглашению вьюшка принимает 1 обязательный параметр 1 параметр остальные а про них ничего не сказано так вот остальные параметры во вьюшке они должны соответствовать скобка захвата


[12:31 - 12:50] а всем скопом которые прописаны в рот в данном случае используется а параметр пк это позиционной параметр но уточню у него есть имя но его можно передавать и как позиционно


[12:50 - 13:08] дан данное вьюшка соответственно была связана с в составе ноутом она ожидает параметр пк он также будет и


[13:08 - 13:23] ну пока захватывается в переменную по имени и соответственно внутрь функции он передается по имени так или иначе будет установлена вот этот параметр то есть а идентификатор поставку пойдет пойдет


[13:23 - 13:42] post details то же самое происходит и с 1 вариантом скачать игры в you идентификатор категории будет захвачен и передан будет а функция игрек ее как позиционной парламент а


[13:42 - 13:59] для ну здесь нужно вспомнить как передаются параметры функции на языке python мы можем вспомнить что параметров можно указывать значением по умолчанию поэтому даже если а регулярные выражения ничего не захватило


[13:59 - 14:14] но должна быть специальным образом написано чтобы поддерживать пустой захват а будет выставлено значение по умолчанию то есть вы можете запускать вьюшки без захват параметров а


[14:14 - 14:33] собственно говоря вы можете а делать вьюшки у которых явно не прописано какие либо параметра а в языке python есть специальная конструкция то есть в списке аргументов можно указывать звездочка


[14:33 - 14:51] и 2 звездочки а при этом звездочка ox попадут все параметры которые передаются как позиционная а упадут все параметры которые передаются как именованы а например если мы опишем нашу елку так


[14:51 - 15:07] то мы сможем получить параметры зла вот с помощью таких конструкций соответственно обратиться 1 перемену или в переменной итак повторю еще раз


[15:07 - 15:26] чтобы передать параметр из пути в урле а внутрь вьюшке нужно сделать 2 вещи во 1 файле спи нужно написать регулярное выражение которое захватывает переменные например


[15:26 - 15:42] по позиции либо захватывать переменной с указанием имени а файле views p в соответствующих вьюшках нужно добавить аргументы функции вью