====== Константы ======
Значения констант влияют на работу функций и процедур. Если по каким-то причинам значения заданные здесь не подходят, можно после импорта переназначить эти константы.
^ Имя ^ Значение по умолчанию ^ Описание ^
| ''VARIABLE_PREFIX'' | ''ru.a0fs.app'' | Префикс переменных и иных элементов, которые сохраняются во внутренних структурах ''bottle'' |
| ''IP_HEADER'' | ''X-Real-IP'' | Заголовок, в котором реверс-прокси хранит реальный IP клиента.
| ''REQ_ID_HEADER'' | ''X-Request-Id'' | Заголовок запроса, в котором реверс-прокси хранит уникальный ID запроса. Данные ID полезны для мультисерверной инфраструктуры балансировки с единой точкой хранения журналов. Nginx даёт достаточно уникальный ID для трассировки запроса в журналах приложения. Выставляется этот ID через параметр конфигурации proxy_set_header X-Request-Id $request_id; |
| ''CONN_ID_HEADER'' | ''X-Conn-ID'' | Идентификатор текущего соединения. Легковесный способ идентифицировать запрос. Добавляется на стороне nginx через: proxy_set_header X-Conn-ID $connection-$connection_requests; |
====== Функции и процедуры ======
===== get_client_ip() =====
Получение реального адреса клиента.
Пытается получить адрес клиента из специальной переменной реверс-прокси ''X-Real-IP''. В случае неудачи, берёт IP узла, откуда пришёл запрос.
**Проверки на установку IP доверенным источником не производится.** Поскольку приложения не выставляются наружу без прикрытия ''nginx'', который можно соответственно настроить. Это не считается проблемой.
get_client_ip([request])
**Возвращает:** Строку с IP клиента.
^ Параметр ^ Тип ^ По умолчанию ^ Описание ^
| ''request'' | ''bottle.BaseRequest'' | ''bottle.request'' | Объект запроса, из которого добываются нужные сведения |
===== get_session_fingerprint() =====
Конструируем некий отпечаток пользовательской сессии.
В качестве параметра принимается всё, что должно участвовать в создании отпечатка. Это всё превращается в строку и подмешивается в хэш. То есть функции можно передать всё, что необходимо для идентификации сессии, и что в состоянии дать значимую строку (при преобразовании ''str()'' это должно быть что-то получше чем имя класса и спецсимволы)
get_session_fingerprint(add_params..., [request])
**Возвращает:** Строку с значением SHA512 от соединённых элементов, данных в параметрах, и некоторых значимых элементов самого запроса (идентификатор браузера и IP источника запроса.
^ Параметр ^ Тип ^ По умолчанию ^ Описание ^
| ''add_params'' | ''Any'' | -- | Параметры (можно добавлять сколько угодно), подмешиваемые в вычисляемый идентификатор клиента. |
| ''request'' | ''bottle.BaseRequest'' | ''bottle.request'' | Объект запроса, относительно которого берутся параметры для вычисления |
===== get_env() =====
Возвращает значения из хранилища контекста запроса ''bottle''. Данный контекст уникален для каждого запроса и в нём могут хранится различные объекты Python, сохранённые обрабатывающим приложением.
get_env(name, [default], [request])
**Возвращает:** Имеющееся в контексте значение, или ''default'', если его сохранили. Тип объекта контролируется разработчиком.
^ Параметр ^ Тип ^ По умолчанию ^ Описание ^
| ''name'' | ''str'' | -- | Имя переменной |
| ''default'' | ''Any'' | ''None'' | Значение по умолчанию, которое возвращается, если в контексте отсутствует соответствующая переменная |
| ''request'' | ''bottle.BaseRequest'' | ''bottle.request'' | Объект запроса, из которого добываются нужные сведения |
===== set_env() =====
Добавляет в контекст переменную, которую затем можно запрашивать через [[#get_env]].
set_env(name, value, [request])
^ Параметр ^ Тип ^ По умолчанию ^ Описание ^
| ''name'' | ''str'' | -- | Имя переменной |
| ''value'' | ''Any'' | -- | Значение, сохраняемое в контекст запроса |
| ''request'' | ''bottle.BaseRequest'' | ''bottle.request'' | Объект запроса, из которого добываются нужные сведения |
===== make_response() =====
Формирование JSON ответа.
Полезно при программировании JSON REST-API. Даёт больший контроль над ответом.
make_response([data], [status], [cookies], [remove_cookies])
**Возвращает:** ''bottle.HTTPResponse'', включающий все заданные функции параметры, который можно отдавать в качестве ответа обработчика URL в ''bottle''
^ Параметр ^ Тип ^ По умолчанию ^ Описание ^
| ''data'' | ''Any'' | ''None'' | Любой объект, которые может быть преобразован в JSON. |
| ''status'' | ''int'' | ''200'' | HTTP-код ответа. |
| ''cookies'' | ''List[Cookie]'' | ''None'' | Устанавливаемые cookie |
| ''remove_cookies'' | ''List[Union[Cookie, str]]'' | ''None'' | Удаляемые cookie, заданные как самими объектами ''Cookie'', так и именами |
В качестве значения ''data'' может быть задана любая осмысленная конструкция. Функция способна к преобразованию в json-вид всех базовых конструкций языка (числа, строки, словари, списки, кортежи). Остальное она приводит к строке и возвращает строку. Конструкции могут быть вложены друг в друга.
===== get_request_json() =====
Если запрос имеет тело JSON, и фреймворк это распознал, то функция вернёт этот JSON.
get_request_json()
**Возвращает:** Словарь, содержащий данный JSON
===== get_cookie() =====
Получить значение ''cookie'' с заданным именем из текущего запроса.
get_cookie(name, [request])
**Возвращает:** Строку со значением cookie или ''None''
^ Параметр ^ Тип ^ По умолчанию ^ Описание ^
| ''name'' | ''str'' | -- | Имя cookie в запросе |
| ''request'' | ''bottle.BaseRequest'' | ''bottle.request'' | Объект запроса, из которого добываются нужные сведения |
===== get_param() =====
Получить из запроса переданный пользователем параметр.
get_param(name, [param_type], [default], [postprocess], [param_source], [request])
**Возвращает:** Переданное пользователем значение
^ Параметр ^ Тип ^ По умолчанию ^ Описание ^
| ''name'' | ''str'' | -- | Имя параметра |
| ''param_type'' | ''type'' или строка ''json'' | ''str'' | Тип параметра, к которому его следует привести перед возвращением. Если задано '''json' '', будет выполнена попытка декодировать поле как JSON строку. |
| ''default'' | ''Any'' | ''None'' | Если не задан параметр, возвращается это |
| ''postprocess'' | ''bool'' | ''True'' | Выполнять ли попытку обработки результата |
| ''param_source'' | ''None'', '''get' '', '''post' '' | ''None'' | Источник параметра, если не задано, то [[https://bottlepy.org/docs/dev/api.html#bottle.BaseRequest.params|используется все параметры]] |
| ''request'' | ''bottle.BaseRequest'' | ''bottle.request'' | Объект запроса, из которого добываются нужные сведения |
Приведение параметров к типу - очень базовая функциональность. Функция не пытается догадываться. Если целевой тип ''bool'' то применяется следующее соответствие:
^ Результат ^ Значение параметра ^
| ''True'' | ''on'', ''yes'', ''1'', ''true'' |
| ''False'' | ''off'', ''no'', ''0'', ''false'' |
Если будет что-то ещё, будет возбуждено исключение.
Обработка результата одна: если целевой тип - строка, то удаляются лидирующие и завершающие пробелы. Чего не ожидается, скажем, в полях паролей.
===== make_log_topic() =====
Сгенерировать подходящий префикс журналирования для данного запроса.
Помогает в журналировании событий, связанных с запросом.
make_log_topic([user], [request])
**Возвращает:** Строку, которую можно использовать для инициализации [[lib.py:aw_log:api|объекта лога]]. Строка представляет собой:
${USER}[${IP} | ${REQ_ID} | ${CONN_ID}] - ${URL}
Где:
* ''${USER}'' - Переданное имя пользователя или ''_NOUID_'' если ничего передано не было.
* ''${IP}'' - Результат работы функции [[#get_client_ip|get_client_ip()]].
* ''${REQ_ID}'' - Значение заголовка ''REQ_ID_HEADER'', если он имеется. В противном случае ничего не подставляется и не выводится разделитель.
* ''${CONN_ID}'' - Значение заголовка ''CONN_ID_HEADER'', если он имеется. В противном случае ничего не подставляется и не выводится разделитель.
* ''${URL}'' - Путь переданный в запросе.
^ Параметр ^ Тип ^ По умолчанию ^ Описание ^
| ''user'' | ''str'' | ''None'' | Имя пользователя. Если ''None'', то данная компонента в префиксе не используется |
| ''request'' | ''bottle.BaseRequest'' | ''bottle.request'' | Объект запроса, из которого добываются нужные сведения |
===== make_error_response() =====
Создание сообщения об ошибке для JSON REST API сервисов.
make_error_response(code, err, [msg], [remove_cookies], [cookies])
**Возвращает:** ''bottle.HTTPResponse'', включающий все заданные функции параметры, который можно отдавать в качестве ответа обработчика URL в ''bottle''
^ Параметр ^ Тип ^ По умолчанию ^ Описание ^
| ''code'' | ''int'' | -- | HTTP-код ответа |
| ''err'' | ''Exception'' или ''str'' | -- | Либо объект исключения, либо название ошибки для обозначения произошедшего пользователю |
| ''msg'' | ''str'' | ''None'' | Сообщение об ошибке, которым можно уточнить произошедшее. Для объекта ''Exception'' данное поле будет получено приведением этого объекта к ''str()'' |
| ''data'' | ''Any'' | ''None'' | Любой объект, которые может быть преобразован в JSON. |
| ''remove_cookies'' | ''List[Union[Cookie, str]]'' | ''None'' | Удаляемые cookie, заданные как самими объектами ''Cookie'', так и именами |
| ''cookies'' | ''List[Cookie]'' | ''None'' | Устанавливаемые cookie |