Step 6 (S-44790)

From Stepik Wiki
Revision as of 13:50, 6 August 2017 by Admin (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

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

Step 6 (S-44790) 1.png

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


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


Step 6 (S-44790) 2.png

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


[00:52 - 01:11] то есть вызывал много раз которая печатал страничку по кусочкам а сейчас страницу нужно каким то образом склеить в 1 переменную и вернуть переспала неправильный подход заключается в том чтобы пытаться это сделать с помощью языка python


[01:11 - 01:30] то есть в принципе вы можете собирать склеивать страничку из кусочков и строк на языке python то есть вот таким образом чтобы упростить себе работу скорее всего будут выделены какие то функции которые 1


[01:30 - 01:47] выводится заголовок страницы 2 страница а 3 функция могла бы брать данные и склеивать их но этот подход очень неудобен и он нежизнеспособен связь с таким подходом использовать никто


[01:47 - 02:04] а правильный подход заключается в разделении а данных и а представления то есть как мы говорили а вот с контроллер занимается тем что


Step 6 (S-44790) 3.png

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


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


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


[02:55 - 03:10] такой подход дает множество плюсов это я бы даже сказал что это основной + а ц которая есть во 1 это разделение работы


[03:10 - 03:27] программист нужно понимать что шаблонами в основном работают фронтенд разработчика либо веб мастера то есть и те же люди кто пишут сейчас я с javascript кода он работает в основном backend программиста а чем


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


[03:46 - 04:01] то есть а вам не нужно будет каждый раз для каждой новая что моя страница которых может быть сотня на сайте заново вводить все таки вы можете повторно использовать что код ну и поскольку в python коде не будет встречаться что мы


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


Step 6 (S-44790) 4.png

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


[04:36 - 04:51] а внутри этого года встречаются небольшие ставки на специальном языке вот например ставка на языке шаблонизатор вот ставка


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


[05:08 - 05:26] надо сказать что в большинстве своем шаблонизатора сделаны а так чтобы они прощали ошибки то есть подразумевается что шаблонизатором работает фронтенд разработчика то есть тот человек который в общем то а


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


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


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


[06:20 - 06:36] переменной из контекста предполагается что в контексте то есть в данных который у нас передавались шаблон у нас есть какой то объект post а в объекте post


[06:36 - 06:53] есть какой то текст ну это я сделал так грубо представлять структуру данных необходимо а вот такая конструкция post текстового соответственно она позволит получить доступ к вот это перемены


[06:53 - 07:12] а можно вводить переменные помимо вывода переменных есть еще специальные конструкции например цикл если у нас есть некоторое список а например список объектов коинс мы можем пройти а


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


Step 6 (S-44790) 5.png

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


Step 6 (S-44790) 6.png

[07:48 - 08:03] джанго сделан таким образом что он возвращает просто строчку а для того чтобы ну большинство вьюшек они должны вернуть мою страничку чтобы не писать лишний код в django а существуют так называемые откаты


[08:03 - 08:19] это специальный модуль в котором содержатся функции которые очень часто используются функции для упрощения работы шаблонизации относятся 2 функции random random spawns давайте начнем с 2


[08:19 - 08:35] функция render получает 2 аргумента 1 это имя шаблона а 2 перемен это контекст


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


[08:54 - 09:09] темплейт перемен этом play this is a настроек это список директорий в которых идет поезд шаблона


[09:09 - 09:25] а шаблонизатор просматривает эту переменную и во всех во всех шаблонах пытается у во всех директориях ищет вот такой вот шаблон такой файл когда он нашел осуществляет шаблонизацию соответственно метод


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


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


[09:57 - 10:14] напомнили контекст какие то данные и вьюшка заканчивается вызовом шаблонизатора то есть мою страничку а метод rendre работает примерно точно также но принимает дополнительные параметры


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


[10:32 - 10:48] response нужно использовать тогда вам важнее производительность чем свинца расскажем когда вы хотите делать а как видим вызов чтобы завтра простой важно передать имя шаблона и контекст


[10:48 - 11:05] а какие возможности предоставляет шаблонизатор основные возможности перечисленные здесь существует множество разных тегов а часто используется t for


Step 6 (S-44790) 7.png

[11:05 - 11:23] и соответствующий ему ян а эти теги позволяют делать операцию по списку а языке python классического цикла со счетчиком есть только проход по списку


[11:23 - 11:38] соответственно у вас шаблон передается какой то список list а и перемена item последовательно проходят все все значения этого списка


[11:38 - 11:55] конструкция if и соответствующая ей андрей в это условное отображение то есть содержимое внутреннее содержимое будет показана выведена в документ только тогда когда условия


[11:55 - 12:10] а конструкции include конструкции include позволяют делать включение от шаблона включение 1 шаблона внутр другого а зачем это нужно


[12:10 - 12:28] когда нужно по разным причинам а 1 причина то что 1 и тот же кусочек кода 1 и тот же фрагмент а может использоваться на разных страницах а например вы можете сверстать блок за какое то для отображения аватарки


[12:28 - 12:44] пользователя аватарке имени пользователя и использовать его во всех местах а во 2 даже если вы не собираетесь использовать в разных местах удобно разделять а удобно разделять страничку на небольшие кусочки


[12:44 - 13:03] и зачем собирать вместе с помощью голоса помощи вызвать include а в чем был вызван плод используется для тех же самых целей для чего используется разделения на отдельные функции в языках программирования далее


[13:03 - 13:22] двойные фигурные скобки это вывод перемены а в переменной может быть а вывод простой переменной либо обращение к свойствам объекта об этом мы поговорим чуть позже превысить при выводе а переменной можно написать вот такую конструкцию


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


[13:40 - 13:56] фильтры можно настраивать а танки час например занимается тем что обрезается а длину строки до необходимого числа это может понадобиться если вы не хотите чтобы например


[13:56 - 14:11] слишком длинный заголовок переносился вы хотите его обрезать по необходимые вам ширине ну и конечно а завтра и django есть комментарии однострочный комментарий начинается


[14:11 - 14:27] вот так заканчивается так и многострочные то есть блочный комментарий это соответственно тэдди коммент и а поподробнее посмотрим а про то как происходит вывод


Step 6 (S-44790) 8.png

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


[14:45 - 15:04] например если у вас а переменная облачность это некоторый объект а content это его свойство то точка content выведет это свойство то есть произойдет обращение к свойству объекта а


[15:04 - 15:19] можно обращаться не только к свойству мной методу например если name а это некоторый объект у которого есть метод стрит вы можете вызвать метод


[15:19 - 15:35] результат вызова метода будет вывезен но скорее всего подразумевается что это строка у которой удаляются пробел


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


[15:50 - 16:05] ключа аватар и словаря причем заметьте если такого ключа нет будет выведено а пустое пустая строка а если у нас post list некоторой


[16:05 - 16:22] некоторые массив стоп лист а точка 0 выйдет 1 элемент массива а причем шаблонизатор нет возможности вывести n элемент массива для этого нужно использовать цикл for не проходиться по а


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


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


[16:57 - 17:16] например можно вызвать функцию delete либо что то похожее и нечаянно удалить объект из базы данных но обычно с этим проблем не возникает а что можно какие особенности можно отметить шаблонизаторы джан


Step 6 (S-44790) 9.png

[17:16 - 17:32] а шаблонизатор автоматически экранировать то что мы в сущности а почему это важно а шаблонизатором а часто выводятся данные которые вели пользователя если эти а


[17:32 - 17:47] данные не экранировать у пользователя будет возможность ввести специальный тег script


[17:47 - 18:02] и получится что пользователь на странице вашего сайта разместил свой javascript это серьезная проблема с безопасностью сайта называется уязвимостей а cross site scripting


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


[18:17 - 18:36] они подставленных шаблон то есть у вас появится а вы что мы или они будут выведены экранированном образом примерно вот так это


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


[18:52 - 19:06] какой то причине отключить экранирование есть специальный фильтр который для 1 конкретной перемены отключает экранирование а если не ошибаюсь по моему save называется


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


[19:25 - 19:43] 2 особенность то что шаблонизатор можно расширять своими фильтрами и т г а это бывает полезно для того чтобы добавить какие то свои новые возможности потому что функционал шаблонизатор jungle довольно ограничен к ним бывает удобно


[19:43 - 19:45] добавить некоторых расширений