Step 3 (S-44786)

From Stepik Wiki
Jump to: navigation, search

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

Step 3 (S-44786) 1.png

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


Step 3 (S-44786) 2.png

[00:19 - 00:35] а входящий запрос в отличие от положения в котором информация разобрана только в 1 приближении то есть разделенные разделена по заголовкам а вот теперь и костя


[00:35 - 00:51] разделение деталей то есть с помощью этого объект вы можете получить удобный доступ ко всем параметрам запрос а давайте посмотрим какие наиболее часто используемые часто используемые


[00:51 - 01:07] переменные а есть перекос а request метод получения 1000000 запросов а это используются довольно редко потому что


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


[01:25 - 01:41] приходится довольно редко но если понадобится это можно сделать с помощью переменной request метод а далее переменные гетц и post большими буквами


[01:41 - 01:59] это а словари в которых содержатся все параметры переданы соответственно гет через какой то стринг то есть через угру post все параметры которые переданы через тело запроса но в случае с post запросом


[01:59 - 02:16] а словарь мы говорим в 1 приближении этот объект ведет себя как словарь то есть его можно использовать так же как в стандартной а объект дик дик словарь dictionary в питоне


[02:16 - 02:34] а на самом деле это более сложный объект у него есть дополнительные параметры нему мы вернемся чуть позже а переменная cookies содержат а


[02:34 - 02:51] это словарь в котором содержатся все входящие куки здесь все просто ключ в этом словаре это имя куки а значение это значение куки а про работу скуки мы поговорим подробнее когда будем говорить


[02:51 - 03:07] про то как реализовать авторизацию как резон авторизацию на нашем сайте переменная фас а это также словарь в котором содержится


[03:07 - 03:25] а файлы загружены и а post запросе то есть мы говорили что форму можно добавить специальные поля поля ввода input type file input


[03:25 - 03:44] type file и тогда у нас форме будут загружаться загружаться файл а при этом нужно указать специально для формы напомню нужно указать


[03:44 - 03:59] мультиплатформ дата part форм


[03:59 - 04:14] а вот немножко неестественно ладно а так или иначе при загрузке такой формы у нас на наш сервер передаются некоторые файлы


[04:14 - 04:31] а как удобнее всего работать удобнее всего работать когда они уже загружена сохраняем на диск и нас есть файловый дескриптор собственно говоря в словаре файл содержит файлы дескриптора ключ здесь соответствует имени инпута то есть


[04:31 - 04:49] имени файла имени импульс через которое этот файл загружался значение то файловый дескриптор с которым вы можете читать и делать с файлом что хотите а далее а словарик метра


[04:49 - 05:08] содержатся все сиджея like перемены то есть фактически переменные окружения которые были переданы а они нужны для тех случаев когда вам нужно получить сырое значение либо например получить какой то заголовок


[05:08 - 05:26] а про который django не знаю как его специальным образом анализировать заголовок это основные переменные которые используются для работы а вьюшки помимо этого


[05:26 - 05:41] могут быть добавлены дополнительные переменные а дело в том что прежде чем вызвать конкретную вьюшку высокой горки отрабатывает так называемой middle в виду


[05:41 - 06:01] кот который оборачивает собой приложение он позволяет добавить некоторый функционал в частности если подключен а middle earth для работы с сессиями а в объекте будет вот такая перемена request session это словарь словарь


[06:01 - 06:17] который представляет собой смесь в чем особенность а все вот эти словари которые мы перечислили они живут ровно 1 запрос то есть на каждый запрос они новая сессия это данные которые а


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


[06:35 - 06:50] а таким образом вы можете делать какие то пометки связанные с текущим пользователем например а так часто реализуют корзину товаров в магазине их складывают все те товары которые он выбрал на данный момент


[06:50 - 07:05] и поэтому они не теряются при переходе от 1 страницы к другу если включен для поддержки стандартных пользователей а во фреймворке django есть а инфраструктура


[07:05 - 07:24] а авторизация и а управление пользователями готовое то переменной request юзер будет содержаться объекте текущего авторизованного пользователя это экземпляр модели а с ним вы можете делать все что вам год ну вы будете знать


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


Step 3 (S-44786) 3.png

[07:41 - 07:57] теперь перейдем к объекту что теперь с post он не похож на request если а requested to в основном объект с которого мы читаем получаем да то объекта теперь спонсор основном создаем руками


[07:57 - 08:13] и заносим него некоторые данные а в самом простом случае объект создается просто вызовом конструктора ему передается 1 аргумент который представляет собой тело ответа


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


[08:30 - 08:49] прежде чем вернуть объект а теперь мы можем его использовать например таким образом поставить в заголовке попасть с голов в принципе у объекта теперь спрос есть дополнительные параметры то есть 1 1 аргумент 1 аргумент который мы передаем это тело ответа


[08:49 - 09:08] как мы знаем о при передачи аргументов важно но при передаче жди ответа важно что код ответа заголовки ответа и тела ответ больше ничего нет а для того чтобы указать какой то произвольный код можно вызвать конструктор


[09:08 - 09:26] переспал с полном виде а вот здесь приведен пример полного вызова указывается content ну либо либо базе называется просто параметр называется content в джанге передается содержимое тело ответа


[09:26 - 09:41] а параметр content type продается заголовок content type a content type устанавливается так часто то есть на это настолько типичный сценарий что


[09:41 - 09:56] этот параметр он был вынесен в конструктор то есть передаются а как аргумент конструктора не вот таким способом как остальные заголовки и наконец важны а важный аргумент


[09:56 - 10:15] конструктор это статус соответственно такого ответа достаточно указать только числом а текст поясняющий например 404 not found джанго выберет сама и стандартных текстов итак таким образом вы можете создать сконструировать hd теперь способ


[10:15 - 10:34] очень часто веб приложением нужно вернуть некоторый стандартный тип ответа например в директ мы говорили что есть такой код ответ 301 302 редирект который говорит о том что


Step 3 (S-44786) 4.png

[10:34 - 10:50] а документ нужно забрать с другом который указан в заголовке локейшен в принципе редиректы можно конструировать с помощью стандартного объекта теперь с post то есть указать статус 302 потом указать заголовок локейшен потом вернуть


[10:50 - 11:09] это не очень удобно поэтому есть специальный под класса а вот здесь указан список классов это о наследнике то есть мы сами правили характера программирование не наследуются от plus hd теперь спонсор а


[11:09 - 11:26] и позволяют более простым образом а конструировать те или иные ответа например а теперь спонсор директ в конструкторе вы передаете сразу а причем код ответа будет установлена автоматически


[11:26 - 11:44] чтобы вернуть редирект вы создаете объект теперь спонсор перманент редирект то же самое но код ответа 301 то есть перманентный редирект соответственно есть а другие подклассы с ними можно ознакомиться в документации


[11:44 - 11:59] а например нот фаунд 404 ошибка а либо в обиду а доступ запрещен для данного пользователя и тому подобное то есть есть шотката для того чтобы вернуть нужны


[11:59 - 12:18] приятный вид ответа давайте подробней посмотрим как получать как работать с переменными get и post поскольку они очень часто используются так нас в объекте ж теперь request есть перемены


Step 3 (S-44786) 5.png

[12:18 - 12:33] если да то есть переменная post мы говорили что эта переменная ведет себя как словарь то есть мы можем работать с переменной get как со словарем языке python а надо вспомнить что при


[12:33 - 12:52] казани не правильного ключа то есть ключа которого нет в словаре будет питон поднимет исключительно ситуацию exception просто ц а соответственно exception которое выбрасывается из функции обработчика в функции вьюшки он приводит 500 ошибки


[12:52 - 13:11] а это тоже важно соглашения то секции option которое не перехватываются они а поднимается до уровня фреймворка а далее django смотрят что возможно это какой то специальный тип исключения например это тп 404 тогда нужно вернуть 400 очередь 4 ошибку


[13:11 - 13:27] а в противном случае возвращается 500 ошибка то есть не перехватим exception приходит приводит к ошибке 500 internal server а итак со словарями где то post можно работать как со словарями


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


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


[14:02 - 14:18] а очень не рекомендуется использовать напрямую в коде а важно понимать что при работе вообще следовать не доверять пользователь всегда может казаться хакер в частности если вы получаете какой то параметр сортировки


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


[14:34 - 14:49] ну как можно получить параметр который может быть не передан для этого используется метод метод get то есть вы получаете не ключ значение они ключ из словаря одет


[14:49 - 15:08] давайте специальный метод этот метод не поднимет exception случае отсутствия ключа for each а в словаре он вернет специальную переменную нам но и здесь соответственно в а ставится значение по умолчанию


[15:08 - 15:24] таким образом пейдж будет равняться строке переданные в get параметре page то есть наши переменно поэтому она будет равняться строки параметры печь а либо она будет равняться единице число единиц


[15:24 - 15:43] далее нужно учитывать что даже когда вы ожидаете что передадут число могут передать все что угодно поэтому желательно явно проверять этой строкой мы приводим а строчку


[15:43 - 15:57] гарантированно к целому числу если привести это не получится то есть строка содержит что то неожиданное будет питон поднимет исключения и соответственно мы вернем


[15:57 - 16:16] из вьюшки p a response bad request это еще 1 код ответа соответствует хттп 400 bad request то есть мы получили неожиданное какой то параметр мы ожидали получить число получили что то другое итак повторю что важно этом слайде


[16:16 - 16:32] на этом сайте важны 2 вещи 1 вы можете задавать значение по умолчанию например так а 2 вы всегда должны проверять пользовательские данные например


[16:32 - 16:49] например в джанге есть специальный механизм называемый формы а которые помогают с проверкой к ним особенно когда когда данных передан очень много например submit большой формы происходят большой for


[16:49 - 17:05] пока ограничимся простым вариантом когда нужно проверить 1 2 аргумента а теперь теперь вернемся к тому что объекты где то post это не совсем словарей


Step 3 (S-44786) 6.png

[17:05 - 17:19] на самом деле это объекты классы а в принципе они ведут себя как словари но у них есть дополнительный функционал связанный с тем что через год


[17:19 - 17:39] параметр то есть через какое то стринг могут передаваться несколько параметров с 1 и тем же именем вот например у нас есть такой урл мы видим что здесь передается параметр id 3 раза это вполне а вполне нормальное явление например при использовании выпадать


[17:39 - 17:57] выпадающих списков но множественных списков точнее использование множественных списков есть такой вот такой поле ввода либо при использовании чекбоксов вас может быть несколько параметров с 1 именем но разными значениями вот отличный пример этому руля


[17:57 - 18:14] что происходит когда вы пытаетесь при вот таком руле получить а получить параметр id а в данном случае какой редирект то есть вот этот объект он вернет вам последний параметр то есть когда вы пытаетесь


[18:14 - 18:33] обратиться к словарю либо вызвать метод get возвращается всегда 1 параметр ну в данном случае последнее то есть если вам нужно получить всем вместо да вместо методы вы вызываете специальный метод get list такого метода


[18:33 - 18:51] у словаря обычных нет он есть и а соответственно вы получаете уже список содержащий все а переданные 2 полезная особенность как про которые стоят


[18:51 - 19:06] помянуть а это возможность реализовать обратно или стринг а есть метод код который позволяет вам все переданные параметры преобразовать обратно строчку


[19:06 - 19:23] а это бывает полезно когда у вас есть сложная форма поиска и приказ 1 запросе вы хотите сохранять старые а старые параметр то есть у вас есть несколько параметров а делается новый запрос вы хотите сохранить те параметры которые уже есть


[19:23 - 19:40] это легко делается с помощью функции поролон кот а чтобы было еще удобнее строить параметры объекта можно устанавливать значение то есть вы можете не только читать их с помощью метода get и set list также устанавливать свои значения


[19:40 - 19:59] с помощью методов сайта сет лист а вот таким образом происходит работа с геты post параметрами а переменная post request post ведет себя точно так же как нет а таким образом происходит работа


[19:59 - 20:02] post параметрами во вьюшках джанго