Skip to content

Публичный интерфейс библиотеки winow-view

Модули

  • View - фасад: заголовки htmx, экранирование, статика, создание объектов

Классы

  • ViewRenderer - рендеринг фрагментов и страниц через JinjOS
  • CsrfGuard - защита форм от подделки межсайтового запроса

Класс CsrfGuard

Защита форм от подделки межсайтового запроса (CSRF).

Токен не хранится на сервере: он состоит из метки времени и HMAC-SHA256 от секрета по паре «метка времени плюс идентификатор сессии». Проверка - это пересчёт подписи, поэтому схема переживает перезапуск приложения и работает при нескольких рабочих процессах без общего хранилища.

Токен привязан к сессии: выданный одному посетителю не подойдёт другому. И ограничен по времени: подсмотренный однажды перестаёт работать.

bsl
Защита = View.СоздатьЗащитуCSRF(ПолучитьПеременнуюСреды("APP_SECRET"));
// то же самое напрямую
Защита = Новый CsrfGuard(ПолучитьПеременнуюСреды("APP_SECRET"));

Конструктор

bsl
Новый CsrfGuard(Знач Секрет, Знач СрокЖизни = 3600)
ПараметрТипОписание
СекретСтрокаСекрет приложения. Одинаковый у всех рабочих процессов, разный в разных окружениях
СрокЖизниЧислоСрок жизни токена в секундах

Пустой секрет и неположительный срок жизни дают исключение: это ошибки настройки приложения, а не внештатные ситуации во время работы. Секрет в исходный код не помещается.

Свойства

СвойствоТипОписание
СрокЖизниТокенаЧислоСрок жизни токена в секундах

Методы

МетодВозвращаетНазначение
СоздатьТокенСтрокаТокен для сессии
ПроверитьТокенБулевоПроверка токена
ПолеФормыСтрокаГотовое скрытое поле формы
ИмяПоляСтрока_csrf
ИмяЗаголовкаСтрокаX-CSRF-Token
ТокенИзЗаголовковСтрокаТокен из заголовков запроса

СоздатьТокен

bsl
Функция СоздатьТокен(Знач ИдентификаторСессии, Знач МеткаВремени = Неопределено) Экспорт

Выдаёт токен для сессии.

Параметры

ПараметрТипОписание
ИдентификаторСессииСтрокаИдентификатор сессии посетителя
МеткаВремениЧислоВремя выдачи в секундах Unix. По умолчанию текущее время

Возвращаемое значение: Строка - токен вида <метка времени>.<подпись>.

Пустой идентификатор сессии даёт исключение: токен без привязки к сессии не защищает ни от чего. Явная метка времени делает выдачу и проверку воспроизводимыми - это нужно в тестах и при разборе инцидентов.

bsl
Токен = Защита.СоздатьТокен(Запрос.Сессия.Идентификатор());
// 1785876773.940be1dbf278fd7cfd73657aab5195d8882616282dd36368527a4965f5a55e97

ПроверитьТокен

bsl
Функция ПроверитьТокен(Знач Токен, Знач ИдентификаторСессии, Знач ТекущаяМетка = Неопределено) Экспорт

Проверяет токен. Не выбрасывает исключений: любое неожиданное значение - это просто непройденная проверка.

Параметры

ПараметрТипОписание
ТокенСтрокаПроверяемый токен
ИдентификаторСессииСтрокаИдентификатор сессии посетителя
ТекущаяМеткаЧислоВремя проверки в секундах Unix. По умолчанию текущее время

Возвращаемое значение: Булево - Истина, если токен выдан этой сессии и не истёк.

Проверка не проходит, если токен пустой или не строка, нет разделителя, метка времени не из цифр или длиннее 12 символов, метка из будущего, срок жизни истёк, подпись не совпала, идентификатор сессии пустой.

Подписи сравниваются за постоянное время, поэтому по длительности проверки подпись не подобрать. Метку ставит сервер по своим часам, поэтому токен из будущего считается поддельным.

bsl
Токен = Запрос.ПараметрыИменные[Защита.ИмяПоля()];

Если Не Защита.ПроверитьТокен(Токен, Запрос.Сессия.Идентификатор()) Тогда
	Ответ.УстановитьСостояние(403);
	Возврат;
КонецЕсли;

ПолеФормы

bsl
Функция ПолеФормы(Знач ИдентификаторСессии) Экспорт

Готовое скрытое поле формы с токеном. Значения экранируются, поле вставляется в шаблон как есть.

Параметры

ПараметрТипОписание
ИдентификаторСессииСтрокаИдентификатор сессии посетителя

Возвращаемое значение: Строка - разметка input type="hidden".

bsl
Модель.Вставить("ПолеCSRF", Защита.ПолеФормы(Запрос.Сессия.Идентификатор()));
html
<form hx-post="/задачи">
	{{ Модель.ПолеCSRF }}
	<input name="название">
</form>

ИмяПоля

bsl
Функция ИмяПоля() Экспорт

Возвращаемое значение: Строка - _csrf. Имя поля формы, в котором ожидается токен.

bsl
Токен = Запрос.ПараметрыИменные[Защита.ИмяПоля()];

ИмяЗаголовка

bsl
Функция ИмяЗаголовка() Экспорт

Возвращаемое значение: Строка - X-CSRF-Token. Имя заголовка, в котором ожидается токен.

Для запросов htmx токен удобно передавать заголовком сразу для всех форм страницы:

html
<body hx-headers='{"X-CSRF-Token": "{{ Модель.ТокенCSRF }}"}'>

ТокенИзЗаголовков

bsl
Функция ТокенИзЗаголовков(Знач Заголовки) Экспорт

Извлекает токен из заголовков запроса независимо от регистра имени.

Параметры

ПараметрТипОписание
ЗаголовкиСоответствие, СтруктураЗаголовки запроса

Возвращаемое значение: Строка - значение заголовка либо пустая строка.

bsl
Если Не Защита.ПроверитьТокен(Защита.ТокенИзЗаголовков(Запрос.Заголовки), Сессия.Идентификатор()) Тогда
	Ответ.УстановитьСостояние(403);
КонецЕсли;

Смотри также


Класс ViewRenderer

Рендеринг HTML через шаблонизатор JinjOS.

Ключевой сценарий htmx: один обработчик отвечает фрагментом на hx-запрос и целой страницей на обычный переход по ссылке.

bsl
Отображения = View.СоздатьОтображения("шаблоны", Новый Структура("Макет", "макет"));
// то же самое напрямую
Отображения = Новый ViewRenderer("шаблоны", Новый Структура("Макет", "макет"));

Конструктор

bsl
Новый ViewRenderer(Знач Каталог, Знач Параметры = Неопределено)
ПараметрТипОписание
КаталогСтрокаКаталог с файлами шаблонов. Пустое значение даёт исключение
ПараметрыСтруктура, СоответствиеНастройки

Настройки:

ПараметрПо умолчаниюОписание
КэшироватьШаблоныИстинаХранить скомпилированные шаблоны в памяти
Расширение".html"Дописывается к имени шаблона без расширения
Макет""Макет по умолчанию для метода Страница
ПлейсхолдерКонтента"@Контент"Место вставки содержимого в макет, та же метка, что использует winow
ПутьКJinjOS-Путь к файлу src/Классы/Шаблон.os пакета JinjOS, если он установлен нестандартно

На время разработки кэш выключают, чтобы правки шаблонов подхватывались без перезапуска сервера.

Свойства

СвойствоТипОписание
КаталогШаблоновСтрокаПолный путь к каталогу шаблонов
МакетПоУмолчаниюСтрокаМакет, применяемый методом Страница без явного указания

Синтаксис шаблонов

{{ Модель.Поле }} подставляет значение, {% ... %} вставляет код OneScript.

html
<ul id="задачи">
{% Для Каждого Задача Из Модель.Задачи Цикл %}
	<li>{{ Задача.Название }}</li>
{% КонецЦикла; %}
</ul>

Разбор JinjOS строже, чем кажется: внутри {% %} операторы завершаются точкой с запятой ({% КонецЦикла; %}), выражение в {{ }} не может содержать закрывающую фигурную скобку, а блок {% %} - знак процента. Моделью может быть Структура, Соответствие или любой объект с полями.

Методы

МетодВозвращаетНазначение
ОтрендеритьСтрокаБазовый метод: шаблон плюс модель
ФрагментСтрокаЧасть страницы для htmx
СтраницаСтрокаШаблон, вставленный в макет
ОтрендеритьТекстСтрокаШаблон, заданный строкой
СуществуетБулевоПроверка наличия файла шаблона
ПутьШаблонаСтрокаПолный путь к файлу шаблона
ОчиститьКэш-Сброс скомпилированных шаблонов

Имя шаблона задаётся относительно каталога шаблонов, расширение можно опустить, подкаталоги разрешены. Имена с .., двоеточием и ведущим слешем отвергаются: имя шаблона нередко приходит из запроса, а через него нельзя давать читать произвольный файл на диске.

Отрендерить

bsl
Функция Отрендерить(Знач ИмяШаблона, Знач Модель = Неопределено) Экспорт

Формирует шаблон с моделью. Базовый метод: Фрагмент и Страница построены на нём.

Параметры

ПараметрТипОписание
ИмяШаблонаСтрокаИмя файла шаблона относительно каталога шаблонов
МодельСтруктура, Соответствие, ПроизвольныйДанные шаблона, доступные как Модель

Возвращаемое значение: Строка - готовая разметка.

bsl
Разметка = Отображения.Отрендерить("задачи/строка", Новый Структура("Название", "Купить хлеб"));

Модель Неопределено заменяется пустой структурой: сообщение об отсутствующем поле понятнее, чем «значение не является значением объектного типа».

Фрагмент

bsl
Функция Фрагмент(Знач ИмяШаблона, Знач Модель = Неопределено) Экспорт

Формирует фрагмент разметки - часть страницы, которую htmx подставит в целевой элемент. Отличается от Отрендерить только названием, читаемым в коде обработчика htmx: фрагмент возвращается без макета.

Параметры: те же, что у Отрендерить.

Возвращаемое значение: Строка - разметка фрагмента.

bsl
Ответ.ТелоТекст = Отображения.Фрагмент("задачи/строка", Задача);

Страница

bsl
Функция Страница(Знач ИмяШаблона, Знач Модель = Неопределено, Знач Макет = Неопределено) Экспорт

Формирует полную страницу: шаблон вставляется в макет на место плейсхолдера. Макет получает ту же модель, поэтому в нём доступны, например, заголовок страницы и данные пользователя.

Параметры

ПараметрТипОписание
ИмяШаблонаСтрокаИмя файла шаблона с содержимым
МодельСтруктура, Соответствие, ПроизвольныйДанные шаблона
МакетСтрокаИмя файла макета. Неопределено - макет по умолчанию

Возвращаемое значение: Строка - разметка страницы. Без макета совпадает с фрагментом.

Макет без плейсхолдера даёт исключение: страница без содержимого - почти наверняка ошибка в шаблоне.

bsl
Ответ.ТелоТекст = Отображения.Страница("задачи/список", Модель);
Ответ.ТелоТекст = Отображения.Страница("задачи/список", Модель, "макет-печати");

ОтрендеритьТекст

bsl
Функция ОтрендеритьТекст(Знач ТекстШаблона, Знач Модель = Неопределено) Экспорт

Формирует шаблон, заданный текстом, минуя файлы и кэш. Полезно для писем и коротких вставок, которые незачем выносить в отдельный файл.

Параметры

ПараметрТипОписание
ТекстШаблонаСтрокаРазметка с подстановками
МодельСтруктура, Соответствие, ПроизвольныйДанные шаблона

Возвращаемое значение: Строка - готовая разметка.

bsl
Сообщить(Отображения.ОтрендеритьТекст("<b>{{ Модель.Имя }}</b>", Новый Структура("Имя", "Пётр")));

Существует

bsl
Функция Существует(Знач ИмяШаблона) Экспорт

Параметры: ИмяШаблона - Строка имя файла шаблона.

Возвращаемое значение: Булево - Истина, если шаблон найден.

bsl
Если Отображения.Существует("задачи/карточка") Тогда
	Ответ.ТелоТекст = Отображения.Фрагмент("задачи/карточка", Задача);
КонецЕсли;

ПутьШаблона

bsl
Функция ПутьШаблона(Знач ИмяШаблона) Экспорт

Возвращает полный путь к файлу шаблона - тот, по которому шаблон будет прочитан. Расширение по умолчанию дописывается здесь же.

Параметры: ИмяШаблона - Строка имя файла шаблона, расширение можно опустить.

Возвращаемое значение: Строка - полный путь к файлу.

bsl
Сообщить(Отображения.ПутьШаблона("задачи/строка"));  // C:\app\шаблоны\задачи\строка.html

ОчиститьКэш

bsl
Процедура ОчиститьКэш() Экспорт

Забывает скомпилированные шаблоны. Нужно, если файлы изменились, а кэширование включено.

bsl
Отображения.ОчиститьКэш();

Сообщения об ошибках

СитуацияСообщение
Шаблон не найденwinow-view: шаблон задачи/строка не найден, искали файл C:\app\шаблоны\задачи\строка.html
Недопустимое имяwinow-view: недопустимое имя шаблона ../../packagedef
Макет без плейсхолдераwinow-view: макет макет не содержит плейсхолдер @Контент
Ошибка внутри шаблонаwinow-view: ошибка формирования шаблона задачи/строка: ...

Сообщение об отсутствующем шаблоне называет и имя, и путь: чаще всего расходятся именно они.

Смотри также


Модуль View

Фасад библиотеки. Делает четыре вещи: читает и выставляет заголовки htmx, экранирует значения модели, отдаёт htmx и Alpine.js как статику и создаёт объекты рендеринга и защиты форм.

Все функции принимают и возвращают нейтральные значения - Соответствие заголовков и строки, - поэтому работают и внутри winow, и в тестах без поднятого сервера.

bsl
#Использовать winow-view

Справочник заголовков: htmx headers.

Состав

ГруппаМетоды
Заголовки запросаЭтоHxЗапрос, ЭтоHxBoosted, ЦельHx, ТриггерHx, ИмяТриггераHx, ТекущийАдресHx, ЭтоЗапросИсторииHx, ЗапросПодтвержденияHx, ЗначениеЗаголовка
Заголовки ответаУстановитьТриггер, УстановитьТриггерПослеЗамены, УстановитьТриггерПослеУстановки, Перенаправить, Обновить, ЗаменитьАдрес, ПротолкнутьАдрес, ПереопределитьЦель, ПереопределитьСпособЗамены, ПереопределитьВыборку
ЭкранированиеЭкранироватьHtml, ЭкранироватьАтрибут
СтатикаПутьКСтатике, ФайлБиблиотеки, СодержимоеБиблиотеки, ТегиПодключения, ВерсииБиблиотек
ОбъектыСоздатьОтображения, СоздатьЗащитуCSRF

Заголовки запроса

Все функции группы принимают один параметр:

ПараметрТипОписание
ЗаголовкиСоответствие, СтруктураЗаголовки запроса, в winow это Запрос.Заголовки

Регистр имён заголовков не важен: HTTP/2 передаёт их только в нижнем регистре, а прокси нормализуют по-своему. Отсутствующий заголовок даёт Ложь для проверок и пустую строку для значений.

МетодВозвращаетЗаголовокСмысл
ЭтоHxЗапрос(Заголовки)БулевоHX-RequestЗапрос отправлен htmx, а не обычным переходом браузера
ЭтоHxBoosted(Заголовки)БулевоHX-BoostedЗапрос вызван ссылкой или формой с hx-boost
ЭтоЗапросИсторииHx(Заголовки)БулевоHX-History-Restore-Requesthtmx восстанавливает страницу из истории
ЦельHx(Заголовки)СтрокаHX-TargetИдентификатор элемента, в который подставится ответ
ТриггерHx(Заголовки)СтрокаHX-TriggerИдентификатор элемента, вызвавшего запрос
ИмяТриггераHx(Заголовки)СтрокаHX-Trigger-NameАтрибут name этого элемента
ТекущийАдресHx(Заголовки)СтрокаHX-Current-URLАдрес страницы, с которой отправлен запрос
ЗапросПодтвержденияHx(Заголовки)СтрокаHX-PromptОтвет пользователя на hx-prompt

Основное применение - решение, чем отвечать. Фрагмент отдаётся только на обычный hx-запрос: hx-boost и восстановление истории заменяют содержимое body, поэтому им нужна страница целиком.

bsl
Если View.ЭтоHxЗапрос(Запрос.Заголовки) И Не View.ЭтоHxBoosted(Запрос.Заголовки) Тогда
	Ответ.ТелоТекст = Отображения.Фрагмент("задачи/список", Модель);
Иначе
	Ответ.ТелоТекст = Отображения.Страница("задачи/список", Модель);
КонецЕсли;

Сообщить(View.ЦельHx(Запрос.Заголовки));         // задачи
Сообщить(View.ИмяТриггераHx(Запрос.Заголовки));  // название

ЗначениеЗаголовка

bsl
Функция ЗначениеЗаголовка(Знач Заголовки, Знач Имя, Знач ЗначениеПоУмолчанию = "") Экспорт

Возвращает произвольный заголовок независимо от регистра его имени.

Параметры

ПараметрТипОписание
ЗаголовкиСоответствие, СтруктураЗаголовки запроса
ИмяСтрокаИмя заголовка
ЗначениеПоУмолчаниюПроизвольныйЧто вернуть, если заголовка нет

Возвращаемое значение: Строка, Произвольный - значение заголовка.

bsl
Язык = View.ЗначениеЗаголовка(Запрос.Заголовки, "Accept-Language", "ru-RU");

Заголовки ответа

Все функции группы возвращают то же Соответствие, что получили, поэтому вызовы можно ставить подряд. Если передать Неопределено, Соответствие создаётся.

ПараметрТипОписание
ЗаголовкиСоответствиеЗаголовки ответа, в winow это Ответ.Заголовки. Неопределено создаёт новое
МетодЗаголовокЧто делает клиент
Перенаправить(Заголовки, Адрес)HX-RedirectПереходит по адресу
Обновить(Заголовки)HX-RefreshПерезагружает страницу целиком
ЗаменитьАдрес(Заголовки, Адрес)HX-Replace-UrlЗаменяет адрес в строке браузера без записи в историю
ПротолкнутьАдрес(Заголовки, Адрес)HX-Push-UrlДобавляет адрес в историю, кнопка «назад» вернёт состояние
ПереопределитьЦель(Заголовки, Селектор)HX-RetargetПодставляет ответ в другой элемент
ПереопределитьСпособЗамены(Заголовки, Способ)HX-ReswapМеняет способ подстановки: значения те же, что у hx-swap
ПереопределитьВыборку(Заголовки, Селектор)HX-ReselectБерёт из ответа только часть, перекрывая hx-select

Параметр Адрес - Строка с адресом перехода, Селектор - Строка с CSS-селектором, Способ - Строка вида innerHTML, outerHTML, beforeend, none.

bsl
// Ошибку валидации показываем в общем блоке сообщений, а не в элементе,
// который просил ответ
View.ПереопределитьСпособЗамены(View.ПереопределитьЦель(Ответ.Заголовки, "#ошибки"), "outerHTML");

// Код 302 для hx-запроса не работает: браузер подставил бы результат
// в целевой элемент
View.Перенаправить(Ответ.Заголовки, "/задачи/список");

Триггеры

bsl
Функция УстановитьТриггер(Знач Заголовки, Знач Имя, Знач Данные = Неопределено) Экспорт
Функция УстановитьТриггерПослеЗамены(Знач Заголовки, Знач Имя, Знач Данные = Неопределено) Экспорт
Функция УстановитьТриггерПослеУстановки(Знач Заголовки, Знач Имя, Знач Данные = Неопределено) Экспорт

Просят htmx вызвать событие на клиенте. Три метода различаются моментом вызова:

МетодЗаголовокКогда событие вызывается
УстановитьТриггерHX-TriggerСразу после получения ответа
УстановитьТриггерПослеЗаменыHX-Trigger-After-SwapПосле подстановки ответа в DOM
УстановитьТриггерПослеУстановкиHX-Trigger-After-SettleПосле анимаций и досылки атрибутов

Параметры

ПараметрТипОписание
ЗаголовкиСоответствиеЗаголовки ответа
ИмяСтрокаИмя события, например задачаДобавлена. Пустое имя даёт исключение
ДанныеСтруктура, Соответствие, Строка, Число, БулевоПодробности события, попадают в detail на клиенте

Возвращаемое значение: Соответствие - заголовки ответа с соответствующим заголовком.

Повторные вызовы накапливаются. Единственное событие без данных передаётся простым именем - так заголовок читается в отладчике браузера. Как только появляются данные или второе событие, заголовок становится объектом JSON.

bsl
View.УстановитьТриггер(Ответ.Заголовки, "задачаДобавлена");
// HX-Trigger: задачаДобавлена

View.УстановитьТриггер(Ответ.Заголовки, "счётчикИзменён", Новый Структура("всего", 3));
// HX-Trigger: {"задачаДобавлена":null,"счётчикИзменён":{"всего":3}}

Экранирование

Шаблонизатор подставляет значения как есть, поэтому всё, что пришло от пользователя, экранируется явно.

bsl
Функция ЭкранироватьHtml(Знач Текст) Экспорт
Функция ЭкранироватьАтрибут(Знач Текст) Экспорт
МетодКуда безопасно вставлятьДополнительно к ЭкранироватьHtml
ЭкранироватьHtmlТекстовое содержимое элемента-
ЭкранироватьАтрибутЗначение атрибута в кавычкахСнимает обратную кавычку

Параметры

ПараметрТипОписание
ТекстПроизвольныйВыводимое значение. Числа и Неопределено допустимы

Возвращаемое значение: Строка - значение, безопасное для вставки.

bsl
Модель.Вставить("Название", View.ЭкранироватьHtml(Задача.Название));
Модель.Вставить("Подсказка", View.ЭкранироватьАтрибут(Задача.Комментарий));
html
<li title="{{ Модель.Подсказка }}">{{ Модель.Название }}</li>

Обратная кавычка в атрибуте без кавычек работает ограничителем значения в некоторых браузерах, поэтому ЭкранироватьАтрибут заменяет и её. Значение атрибута всё равно берите в кавычки.

Статика

ПутьКСтатике

bsl
Функция ПутьКСтатике() Экспорт

Каталог с библиотеками, поставляемыми в составе пакета. Его достаточно зарегистрировать в winow как каталог статики.

Возвращаемое значение: Строка - полный путь к каталогу.

bsl
Приложение.ДобавитьКаталогСтатики("/static", View.ПутьКСтатике());

ФайлБиблиотеки

bsl
Функция ФайлБиблиотеки(Знач Имя) Экспорт

Параметры: Имя - Строка "htmx" или "alpine", допускается и полное имя файла.

Возвращаемое значение: Строка - полный путь к файлу.

bsl
Сообщить(View.ФайлБиблиотеки("htmx"));  // ...\src\static\htmx.min.js

СодержимоеБиблиотеки

bsl
Функция СодержимоеБиблиотеки(Знач Имя) Экспорт

Возвращает содержимое поставляемой библиотеки. Нужно, когда файлы отдаёт сам обработчик, а не каталог статики winow.

Параметры: Имя - Строка "htmx" или "alpine", допускается и полное имя файла.

Возвращаемое значение: Строка - текст файла библиотеки.

Имя проверяется по закрытому списку: имя, пришедшее из запроса, не прочитает ничего, кроме двух поставляемых файлов, даже если в нём приедет ../.

bsl
&ТочкаМаршрута("static/{ИмяФайла}")
Процедура Библиотека(ИмяФайла, Ответ) Экспорт

	Ответ.УстановитьТипКонтента("js");
	Ответ.ТелоТекст = View.СодержимоеБиблиотеки(ИмяФайла);

КонецПроцедуры

ТегиПодключения

bsl
Функция ТегиПодключения(Знач Префикс = "/static") Экспорт

Теги подключения htmx и Alpine.js для вставки в макет. Завершающие слеши в префиксе отбрасываются.

Параметры: Префикс - Строка адрес, по которому раздаётся каталог статики.

Возвращаемое значение: Строка - два тега script, разделённые переводом строки.

bsl
Модель.Вставить("Скрипты", View.ТегиПодключения("/static"));
html
<script src="/static/htmx.min.js"></script>
<script src="/static/alpine.min.js" defer></script>

Alpine.js подключается с defer не для скорости: без него библиотека инициализируется раньше, чем разобран документ, и не находит разметку.

ВерсииБиблиотек

bsl
Функция ВерсииБиблиотек() Экспорт

Возвращаемое значение: Соответствие - "htmx" и "alpine" -> версия.

Версия проверяется тестом: объявленная здесь должна совпадать с версией внутри файла, иначе документация и то, что реально уходит браузеру, разъедутся.

bsl
Сообщить(View.ВерсииБиблиотек().Получить("htmx"));  // 2.0.10

Объекты

СоздатьОтображения

bsl
Функция СоздатьОтображения(Знач КаталогШаблонов, Знач Параметры = Неопределено) Экспорт

Создаёт объект рендеринга шаблонов.

Параметры

ПараметрТипОписание
КаталогШаблоновСтрокаКаталог с файлами шаблонов
ПараметрыСтруктура, СоответствиеНастройки, см. ViewRenderer

Возвращаемое значение: ViewRenderer - объект рендеринга.

bsl
Отображения = View.СоздатьОтображения("шаблоны", Новый Структура("Макет", "макет"));

СоздатьЗащитуCSRF

bsl
Функция СоздатьЗащитуCSRF(Знач Секрет, Знач СрокЖизни = 3600) Экспорт

Создаёт защиту форм от CSRF.

Параметры

ПараметрТипОписание
СекретСтрокаСекрет приложения для подписи токенов
СрокЖизниЧислоСрок жизни токена в секундах

Возвращаемое значение: CsrfGuard - объект защиты форм.

bsl
Защита = View.СоздатьЗащитуCSRF(ПолучитьПеременнуюСреды("APP_SECRET"));

Смотри также