Spec-Zone.ru › Werkzeug 2.0

Объекты запроса/ответа

Объекты запроса и ответа оборачивают среду WSGI или возвращаемое значение приложения WSGI, превращая его в другое приложение WSGI (обрамляя всё приложение целиком).

Как они работают

Ваше приложение WSGI всегда получает два аргумента. WSGI «среда» и WSGI start_response функция, используемая для запуска фазы ответа. Класс Request оборачивает environ для более удобного доступа к переменным запроса (данные формы, заголовки запроса и т. д.).

С другой стороны, Response — стандартное приложение WSGI, которое вы можете создать. Простой «привет мир» на Werkzeug выглядит так:

from werkzeug.wrappers import Response
application = Response('Hello World!')

Чтобы сделать его более полезным, вы можете заменить его функцией и выполнить некоторую обработку:

from werkzeug.wrappers import Request, Response

def application(environ, start_response):
    request = Request(environ)
    response = Response(f"Hello {request.args.get('name', 'World!')}!")
    return response(environ, start_response)

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

from werkzeug.wrappers import Request, Response

@Request.application
def application(request):
    return Response(f"Hello {request.args.get('name', 'World!')}!")

application по-прежнему является допустимым приложением WSGI, которое принимает среду и start_response вызываемую функцию.

Изменяемость и повторное использование обёртки

Реализация объектов запроса и ответа Werkzeug пытается оградить вас от распространённых ошибок, запрещая определённые действия по мере возможности. Это служит двум целям: высокой производительности и предотвращения ошибок.

Для объекта запроса применяются следующие правила:

  1. Объект запроса неизменяемый. Изменения по умолчанию не поддерживаются, но вы можете заменить неизменяемые атрибуты на изменяемые, если вам нужно его изменить.
  2. Объект запроса может быть общим в рамках одного потока, но сам по себе не потокобезопасен. Если вам нужно получить к нему доступ из нескольких потоков, используйте блокировки вокруг вызовов.
  3. Невозможно выполнить сериализацию объекта запроса с помощью pickle.

Для объекта ответа применяются следующие правила:

  1. Объект ответа изменяемый.
  2. Объект ответа можно сериализовать с помощью pickle или скопировать после вызова freeze().
  3. Начиная с Werkzeug 0.6, безопасно использовать один и тот же объект ответа для нескольких ответов WSGI.
  4. Можно создавать копии, используя copy.deepcopy.

Классы-обертки

class werkzeug.wrappers.Request(environ, populate_request=True, shallow=False)

Представляет входящий WSGI HTTP-запрос с заголовками и телом, взятыми из WSGI-окружения. Имеет свойства и методы для использования функциональности, определенной различными спецификациями HTTP. Данные в объекте запроса являются только для чтения.

Предполагается, что текстовые данные используют кодировку UTF-8, что должно быть верно для подавляющего большинства современных клиентов. Использование кодировки, установленной клиентом, небезопасно в Python из-за дополнительных кодировок, которые он предоставляет, таких как zip. Чтобы изменить предполагаемую кодировку, создайте подкласс и замените charset.

Параметры
  • environ (WSGIEnvironment) – WSGI-окружение генерируется WSGI-сервером и содержит информацию о конфигурации сервера и запросе клиента.
  • populate_request (bool) – Добавляет этот объект запроса в WSGI-окружение в качестве environ['werkzeug.request']. Может быть полезно при отладке.
  • shallow (bool) – При чтении из stream (и любого метода, который бы читал из него) вызывает RuntimeError. Полезно для предотвращения потребления данных формы в middleware, что сделает их недоступными для конечного приложения.
Тип возвращаемого значения

None

Изменено в версии 2.0: Объединение BaseRequest и миксинов в один класс Request. Использование старых классов устарело и будет удалено в Werkzeug 2.1.

Изменения

Изменено в версии 0.5: Режим только для чтения применяется с помощью неизменяемых классов для всех данных.

_get_file_stream(total_content_length, content_type, filename=None, content_length=None)

Вызывается для получения потока для загрузки файла.

Это должно предоставить похожий на файл класс с методами read(), readline() и seek(), который одновременно является записываемым и читаемым.

По умолчанию реализация возвращает временный файл, если общая длина содержимого больше 500 КБ. Так как многие браузеры не предоставляют длину содержимого для файлов, важна только общая длина содержимого.

Параметры
  • total_content_length (Optional[int]) – общая длина содержимого всех данных в запросе вместе. Это значение гарантированно присутствует.
  • content_type (Optional[str]) – тип MIME загружаемого файла.
  • filename (Optional[str]) – имя файла загружаемого файла. Может быть None.
  • content_length (Optional[int]) – длина этого файла. Это значение обычно не предоставляется, так как веб-браузеры не предоставляют эту информацию.
Тип возвращаемого значения

BinaryIO

property accept_charsets: werkzeug.datastructures.CharsetAccept

Список кодировок символов, поддерживаемых этим клиентом, как объект CharsetAccept.

property accept_encodings: werkzeug.datastructures.Accept

Список кодировок, принимаемых этим клиентом. Кодировки в терминологии HTTP — это кодировки сжатия, такие как gzip. Для кодировок символов см. accept_charset.

property accept_languages: werkzeug.datastructures.LanguageAccept

Список языков, которые принимает этот клиент, как объект LanguageAccept.

property accept_mimetypes: werkzeug.datastructures.MIMEAccept

Список MIME-типов, поддерживаемых этим клиентом, как объект MIMEAccept.

access_control_request_headers

Отправляется с предварительным запросом для указания заголовков, которые будут отправлены с запросом к другому источнику. Установите access_control_allow_headers в ответе, чтобы указать разрешенные заголовки.

access_control_request_method

Отправляется с предварительным запросом, чтобы указать метод, который будет использоваться для запроса к другому источнику. Установите access_control_allow_methods в ответе, чтобы указать разрешенные методы.

property access_route: List[str]

Если заголовок переадресации существует, это список всех IP-адресов от IP-адреса клиента до последнего прокси-сервера.

classmethod application(f)

Декорирует функцию как обработчик, принимающий запрос в качестве последнего аргумента. Это работает как декоратор responder(), но функции передается объект запроса в качестве последнего аргумента, и объект запроса будет автоматически закрыт:

@Request.application
def my_wsgi_app(request):
    return Response('Hello World!')

Начиная с Werkzeug 0.14, HTTP-исключения автоматически перехватываются и преобразуются в ответы вместо отказа.

Параметры

f (Callable[[Запрос], WSGIApplication]) – вызываемая WSGI-функция для декорирования

Возвращает

новая вызываемая WSGI-функция

Тип возвращаемого значения

WSGIApplication

property args: MultiDict[str, str]

Анализируемые параметры URL (часть в URL после вопросительного знака).

По умолчанию функция возвращает ImmutableMultiDict. Это можно изменить, установив parameter_storage_class на другой тип. Это может потребоваться, если порядок данных формы важен.

property authorization: Optional[werkzeug.datastructures.Authorization]

Объект Authorization в обработанном виде.

property base_url: str

Подобно url, но без строки запроса.

property cache_control: werkzeug.datastructures.RequestCacheControl

Объект RequestCacheControl для входящих заголовков управления кэшем.

close()

Закрывает связанные ресурсы этого объекта запроса. Это закрывает все дескрипторы файлов явно. Вы также можете использовать объект запроса в операторе with, который автоматически закроет его.

Изменения

Добавлено в версии 0.9.

Тип возвращаемого значения

None

content_encoding

Поле заголовка сущности Content-Encoding используется как модификатор типа носителя. Если оно присутствует, его значение указывает, какие дополнительные кодировки содержимого были применены к телу сущности, и, следовательно, какие механизмы декодирования необходимо применить для получения типа носителя, указанного в поле Content-Type.

Изменения

Добавлено в версии 0.9.

property content_length: Optional[int]

Поле заголовка сущности Content-Length указывает размер тела сущности в байтах или, в случае метода HEAD, размер тела сущности, который был бы отправлен, если бы запрос был GET.

content_md5

Поле заголовка сущности Content-MD5, определённое в RFC 1864, представляет собой хеш-код MD5 тела сущности, предназначенный для проверки целостности сообщения сущности от начала до конца (MIC). (Примечание: MIC подходит для обнаружения случайных изменений тела сущности во время передачи, но не является защитой от злонамеренных атак.)

Журнал изменений

Введено в версии 0.9.

content_type

Поле заголовка сущности Content-Type указывает на тип носителя тела сущности, отправленного получателю или, в случае метода HEAD, тип носителя, который был бы отправлен, если бы запрос был методом GET.

property cookies: ImmutableMultiDict[str, str]

Словарь dict с содержимым всех файлов cookie, переданных с запросом.

property data: bytes

Содержит данные входящего запроса в виде строки в случае, если они были отправлены с типом mime, который Werkzeug не обрабатывает.

date

Поле общего заголовка Date представляет дату и время возникновения сообщения, имеющее такие же семантические значения, как и orig-date в RFC 822.

Изменено в версии 2.0: Объект datetime учитывает часовой пояс.

dict_storage_class

Псевдоним werkzeug.datastructures.ImmutableMultiDict

disable_data_descriptor: Optional[bool] = None

Отключить свойство data для предотвращения чтения из потока ввода.

Устарело начиная с версии 2.0: Будет удалено в Werkzeug 2.1. Создайте запрос с помощью shallow=True вместо этого.

Журнал изменений

Введено в версии 0.9.

environ: WSGIEnvironment

WSGI-среда, содержащая HTTP-заголовки и информацию от WSGI-сервера.

property files: ImmutableMultiDict[str, FileStorage]

Объект MultiDict, содержащий все загруженные файлы. Каждый ключ в files — имя из <input type="file" name="">. Каждое значение в files — объект Werkzeug FileStorage.

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

Обратите внимание, что files будет содержать данные только в том случае, если метод запроса был POST, PUT или PATCH, и <form> , отправленный в запрос, имел enctype="multipart/form-data". В противном случае он будет пустым.

См. документацию MultiDict / FileStorage для получения дополнительной информации о используемой структуре данных.

property form: ImmutableMultiDict[str, str]

Параметры формы. По умолчанию из этой функции возвращается ImmutableMultiDict. Это можно изменить, установив parameter_storage_class на другой тип. Это может потребоваться, если порядок данных формы важен.

Пожалуйста, имейте в виду, что загрузки файлов не будут здесь, а вместо этого в атрибуте files.

Журнал изменений

Изменено в версии 0.9: В предыдущих версиях Werkzeug 0.9 это содержало бы только данные формы для запросов POST и PUT.

form_data_parser_class

Псевдоним werkzeug.formparser.FormDataParser

classmethod from_values(*args, **kwargs)

Создаёт новый объект запроса на основе предоставленных значений. Если указана среда, пропущенные значения заполняются из неё. Этот метод полезен для небольших скриптов, когда вам нужно смоделировать запрос из URL. Не используйте этот метод для тестирования модулей, есть полноценный объект клиента (Client), который позволяет создавать запросы multipart, поддерживает файлы cookie и т.д.

Он принимает те же параметры, что и EnvironBuilder.

Журнал изменений

Изменено в версии 0.5: Этот метод теперь принимает те же аргументы, что и EnvironBuilder. Из-за этого параметр environ теперь называется environ_overrides.

Возвращает

объект запроса

Параметры
  • args (Любой тип) –
  • kwargs (Любой тип) –
Тип возвращаемого значения

werkzeug.wrappers.request.Request

property full_path: str

Запрашиваемый путь, включая строку запроса.

get_data(cache=True, as_text=False, parse_form_data=False)

Этот метод считывает буферизованные входящие данные от клиента в один байтовый объект. По умолчанию он кэшируется, но это поведение можно изменить, установив cache в False.

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

Обратите внимание, что если данные формы уже обработаны, этот метод ничего не вернёт, так как обработка данных формы не кэширует данные, в отличие от этого метода. Чтобы неявно вызвать функцию обработки данных формы, установите parse_form_data в True. В этом случае возвращаемое значение этого метода будет пустой строкой, если обработчик формы обрабатывает данные. Как правило, это не требуется, так как если все данные кэшируются (что является по умолчанию), обработчик формы будет использовать кэшированные данные для обработки данных формы. Пожалуйста, всегда проверяйте длину содержимого перед вызовом этого метода, чтобы избежать исчерпания памяти сервера.

Если as_text установлено в True, возвращаемое значение будет декодированной строкой.

Журнал изменений

Введено в версии 0.9.

Параметры
  • cache (bool) –
  • as_text (bool) –
  • parse_form_data (bool) –
Тип возвращаемого значения

Объединение [bytes, str]

get_json(force=False, silent=False, cache=True)

Разбор data в формате JSON.

Если тип MIME не указывает на JSON (application/json, см. is_json()), это возвращает None.

Если разбор завершается ошибкой, вызывается on_json_loading_failed(), и её значение используется в качестве результата.

Параметры
  • force (bool) – Игнорировать тип MIME и всегда пытаться разобрать JSON.
  • silent (bool) – Скрыть ошибки разбора и вернуть None вместо этого.
  • cache (bool) – Сохранить разобранный JSON для последующих вызовов.
Тип возвращаемого значения

Optional[Any]

headers

Заголовки, полученные с запросом.

property host: str

Имя хоста, к которому был отправлен запрос, включая порт, если он нестандартный. Проверяется с помощью trusted_hosts.

property host_url: str

Схема и имя хоста URL запроса.

property if_match: werkzeug.datastructures.ETags

Объект, содержащий все значения ETag в заголовке If-Match.

Тип возвращаемого значения

ETags

property if_modified_since: Optional[datetime.datetime]

Разбор заголовка If-Modified-Since в формате datetime.

Изменено в версии 2.0: Объект datetime учитывает часовой пояс.

property if_none_match: werkzeug.datastructures.ETags

Объект, содержащий все значения ETag в заголовке If-None-Match.

Тип возвращаемого значения

ETags

property if_range: werkzeug.datastructures.IfRange

Разбор заголовка If-Range.

Изменено в версии 2.0: IfRange.date учитывает часовой пояс.

Changelog

Добавлено в версии 0.7.

property if_unmodified_since: Optional[datetime.datetime]

Разбор заголовка If-Unmodified-Since в формате datetime.

Изменено в версии 2.0: Объект datetime учитывает часовой пояс.

input_stream

Поток ввода WSGI.

В общем случае его использование нежелательно, так как можно легко прочитать данные за границу. Используйте stream вместо него.

property is_json: bool

Проверка, указывает ли тип MIME на данные в формате JSON, либо application/json, либо application/*+json.

is_multiprocess

булево значение, True если приложение обслуживается сервером WSGI, который запускает несколько процессов.

is_multithread

булево значение, True если приложение обслуживается многопоточным сервером WSGI.

is_run_once

булево значение, True если приложение будет выполнено только один раз за время жизни процесса. Например, это характерно для CGI, но не гарантируется, что выполнение произойдёт только один раз.

property is_secure: bool

True если запрос был отправлен с помощью защищённого протокола (HTTPS или WSS).

property json: Optional[Any]

Разобранные данные в формате JSON, если mimetype указывает на JSON (application/json, см. is_json()).

Вызывает get_json() с параметрами по умолчанию.

json_module = <module 'json' from '/home/docs/.pyenv/versions/3.7.9/lib/python3.7/json/__init__.py'>

Модуль или другой объект, имеющий функции dumps и loads соответствующие API встроенного модуля json.

list_storage_class

Псевдоним для werkzeug.datastructures.ImmutableList

make_form_data_parser()

Создаёт парсер данных формы. Инициализирует form_data_parser_class с некоторыми параметрами.

Changelog

Добавлено в версии 0.8.

Тип возвращаемого значения

werkzeug.formparser.FormDataParser

max_content_length: Optional[int] = None

Максимальная длина содержимого. Передаётся в функцию разбора данных формы (parse_form_data()). При установке и обращении к атрибуту form или files, если разбор завершается ошибкой из-за превышения указанного значения, генерируется исключение RequestEntityTooLarge.

Подробности см. в разделе Обработка данных запроса.

Changelog

Добавлено в версии 0.5.

max_form_memory_size: Optional[int] = None

Максимальный размер поля формы. Передаётся в функцию разбора данных формы (parse_form_data()). При установке и обращении к атрибуту form или files, если размер данных в памяти для данных POST превышает указанное значение, генерируется исключение RequestEntityTooLarge.

Подробности см. в разделе Обработка данных запроса.

Changelog

Добавлено в версии 0.5.

max_forwards

Поле заголовка запроса Max-Forwards предоставляет механизм для методов TRACE и OPTIONS, ограничивающий количество прокси или шлюзов, которые могут пересылать запрос следующему серверу.

method

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

property mimetype: str

Как content_type, но без параметров (например, без набора символов, типа и т. д.) и всегда в нижнем регистре. Например, если тип содержимого text/HTML; charset=utf-8 , то mimetype будет 'text/html'.

property mimetype_params: Dict[str, str]

Параметры mimetype в виде словаря. Например, если тип содержимого text/html; charset=utf-8 , то параметры будут {'charset': 'utf-8'}.

on_json_loading_failed(e)

Вызывается, если разбор get_json() завершается неудачно и не отключается. Если этот метод возвращает значение, оно используется как возвращаемое значение для get_json(). По умолчанию реализация вызывает BadRequest.

Parameters

e (ValueError) –

Return type

Любое

origin

Хост, с которого исходит запрос. Установите access_control_allow_origin в ответе, чтобы указать разрешенные источники.

parameter_storage_class

Псевдоним для werkzeug.datastructures.ImmutableMultiDict

path

Часть пути URL после root_path. Это путь, используемый для маршрутизации в приложении.

property pragma: werkzeug.datastructures.HeaderSet

Поле заголовка общего назначения Pragma используется для включения директив, специфичных для реализации, которые могут применяться к любому получателю вдоль цепочки запроса/ответа. Все директивы Pragma указывают необязательное поведение с точки зрения протокола; однако некоторые системы МОГУТ потребовать, чтобы это поведение соответствовало директивам.

query_string

Часть URL после «?». Это исходное значение. Используйте args для разобранных значений.

property range: Optional[werkzeug.datastructures.Range]

Разбор заголовка Range.

Changelog

В версии 0.7.

Return type

Range

referrer

Поле заголовка запроса Referer позволяет клиенту указать серверу адрес (URI) ресурса, из которого был получен запрашиваемый URI (то есть «ссылка», хотя в названии поля заголовка допущена опечатка).

remote_addr

Адрес клиента, отправляющего запрос.

remote_user

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

root_path

Префикс, под которым установлено приложение, без заключительного слэша. path следует за ним.

property root_url: str

Схема, хост и корневой путь URL запроса. Это корень, с которого осуществляется доступ к приложению.

scheme

Схема URL протокола, использованного запросом, например https или wss.

property script_root: str

Псевдоним для self.root_path. environ["SCRIPT_ROOT"] без заключительного слэша.

server

Адрес сервера. (host, port), (path, None) для сокетов Unix или None , если неизвестно.

shallow: bool

Устанавливается при создании объекта запроса. Если True, чтение из тела запроса вызовет RuntimeException. Полезно для предотвращения изменения потока из среды.

property stream: BinaryIO

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

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

Changelog

Изменено в версии 0.9: Этот поток теперь всегда доступен, но может быть прочитан парсером формы позже. Ранее поток устанавливался только если парсинг не происходил.

property url: str

Полный URL запроса со схемой, хостом, корневым путем, путем и строкой запроса.

property url_charset: str

Набор символов, предполагаемый для URL. По умолчанию используется значение charset.

Changelog

В версии 0.6.

property url_root: str

Псевдоним для root_url. URL со схемой, хостом и корневым путем. Например, https://example.com/app/.

property user_agent: werkzeug.user_agent.UserAgent

Пользовательский агент. Используйте user_agent.string для получения значения заголовка. Установите user_agent_class на подкласс UserAgent, чтобы предоставить разбор для других свойств или других расширенных данных.

Изменено в версии 2.0: Встроенный парсер устарел и будет удален в Werkzeug 2.1. Необходимо установить подкласс UserAgent для разбора данных из строки.

user_agent_class

Псевдоним для werkzeug.useragents._UserAgent

property values: CombinedMultiDict[str, str]

werkzeug.datastructures.CombinedMultiDict, объединяющий args и form.

Для GET-запросов присутствуют только args, а не form.

Изменено в версии 2.0: Для GET-запросов присутствуют только args, а не form.

property want_form_data_parsed: bool

True если метод запроса переносит содержимое. По умолчанию это верно, если отправляется Content-Type.

Changelog

Добавлено в версии 0.8.

class werkzeug.wrappers.Response(response=None, status=None, headers=None, mimetype=None, content_type=None, direct_passthrough=False)

Представляет исходящий WSGI HTTP-ответ с телом, кодом состояния и заголовками. Имеет свойства и методы для использования функциональности, определенной различными спецификациями HTTP.

Тело ответа гибкое, чтобы поддерживать различные варианты использования. Простой вариант — передача байтов или строки, которая будет закодирована как UTF-8. Передача итерируемого объекта байтов или строк делает этот ответ потоковым. Генератор особенно полезен для создания CSV-файла в памяти или использования SSE (Server Sent Events). Объект типа файла также итерируемый, хотя в этом случае следует использовать помощник send_file().

Объект ответа сам по себе является вызываемым WSGI-приложением. При вызове (__call__()) с environ и start_response, он передаст свой код состояния и заголовки в start_response, а затем вернёт своё тело как итерируемый объект.

from werkzeug.wrappers.response import Response

def index():
    return Response("Hello, World!")

def application(environ, start_response):
    path = environ.get("PATH_INFO") or "/"

    if path == "/":
        response = index()
    else:
        response = Response("Not Found", status=404)

    return response(environ, start_response)
Параметры
  • response (Union[Iterable[str], Iterable[bytes]]) – Данные для тела ответа. Строка или байты, или кортеж или список строк или байтов для ответа фиксированной длины, или любой другой итерируемый объект строк или байтов для потокового ответа. По умолчанию пустое тело.
  • status (Optional[Union[int, str, http.HTTPStatus]]) – Код состояния ответа. Целое число, в этом случае добавляется сообщение по умолчанию, или строка в формате {code} {message}, например 404 Not Found. По умолчанию 200.
  • headers (werkzeug.datastructures.Headers) – Объект Headers или список кортежей (key, value), которые будут преобразованы в объект Headers.
  • mimetype (Optional[str]) – Тип MIME (тип контента без кодировки символов или других параметров) ответа. Если значение начинается с text/ (или соответствует другим специальным случаям), кодировка символов будет добавлена для создания content_type.
  • content_type (Optional[str]) – Полный тип контента ответа. Переопределяет построение значения из mimetype.
  • direct_passthrough (bool) – Передавать тело ответа непосредственно как WSGI итерируемый объект. Это можно использовать, когда тело является двоичным файлом или другим итератором байтов, чтобы пропустить некоторые ненужные проверки. Используйте send_file() вместо ручного задания.
Тип возвращаемого значения

None

Изменено в версии 2.0: Объединение BaseResponse и миксинов в один класс Response. Использование старых классов устарело и будет удалено в Werkzeug 2.1.

Изменения

Изменено в версии 0.5: Параметр direct_passthrough был добавлен.

__call__(environ, start_response)

Обработка этого ответа как WSGI-приложения.

Параметры
  • environ (WSGIEnvironment) – WSGI-среда.
  • start_response (StartResponse) – вызываемый объект ответа, предоставленный WSGI-сервером.
Возвращает

итератор приложения

Тип возвращаемого значения

Iterable[bytes]

_ensure_sequence(mutable=False)

Этот метод может быть вызван методами, которым требуется последовательность. Если mutable имеет значение true, он также гарантирует, что последовательность ответа является стандартным списком Python.

Изменения

Добавлен в версии 0.6.

Параметры

mutable (bool) –

Тип возвращаемого значения

None

accept_ranges

Заголовок Accept-Ranges. Несмотря на то, что название предполагает поддержку нескольких значений, должен быть только один строковый токен.

Общие значения 'bytes' и 'none'.

Изменения

Добавлен в версии 0.7.

property access_control_allow_credentials: bool

Разрешает ли браузер делиться учётными данными с кодом JavaScript. В рамках предварительного запроса это указывает, можно ли использовать учётные данные для кросс-доменного запроса.

access_control_allow_headers

Какие заголовки можно отправлять с кросс-доменным запросом.

access_control_allow_methods

Какие методы можно использовать для кросс-доменного запроса.

access_control_allow_origin

Происхождение или ‘*’ для любого происхождения, которое может выполнять кросс-доменные запросы.

access_control_expose_headers

Какие заголовки можно делиться браузером с кодом JavaScript.

access_control_max_age

Максимальное время в секундах, в течение которого настройки контроля доступа могут кешироваться.

add_etag(overwrite=False, weak=False)

Добавить значение etag для текущего ответа, если его ещё нет.

Изменено в версии 2.0: Используется SHA-1 для генерации значения. MD5 может быть недоступен в некоторых средах.

Параметры
  • overwrite (bool) –
  • weak (bool) –
Тип возвращаемого значения

None

age

Поле заголовка ответа Age передаёт оценку отправителя времени, прошедшего с момента генерации ответа (или его перепроверки) на сервере происхождения.

Значения Age — это неотрицательные десятичные целые числа, представляющие время в секундах.

property allow: werkzeug.datastructures.HeaderSet

Поле заголовка Allow указывает набор методов, поддерживаемых ресурсом, идентифицируемым Request-URI. Цель этого поля — сообщить получателю о допустимых методах, связанных с ресурсом. Заголовок Allow ОБЯЗАТЕЛЬНО должен присутствовать в ответе 405 (Метод не разрешён).

autocorrect_location_header = True

Должен ли этот объект ответа исправлять заголовок location, чтобы соответствовать RFC? По умолчанию — true.

Изменения

Добавлен в версии 0.8.

automatically_set_content_length = True

Должен ли этот объект ответа автоматически устанавливать заголовок content-length, если это возможно? По умолчанию — true.

Изменения

Добавлен в версии 0.8.

property cache_control: werkzeug.datastructures.ResponseCacheControl

Поле Cache-Control общего заголовка используется для указания директив, которые ДОЛЖНЫ выполняться всеми механизмами кэширования по цепочке запроса/ответа.

calculate_content_length()

Возвращает длину содержимого, если она доступна, или None в противном случае.

Тип возвращаемого значения

Optional[int]

call_on_close(func)

Добавляет функцию в внутренний список функций, которые должны быть вызваны в рамках закрытия ответа. Начиная с версии 0.7, эта функция также возвращает функцию, которая была передана, чтобы это можно было использовать как декоратор.

Журнал изменений

Введено в версии 0.6.

Параметры

func (Callable[[], Any]) –

Тип возвращаемого значения

Callable[[], Any]

close()

Закрыть обернутый ответ, если это возможно. Вы также можете использовать объект в операторе with, который автоматически закроет его.

Журнал изменений

Введено в версии 0.9: Теперь можно использовать в операторе with.

Тип возвращаемого значения

None

content_encoding

Поле Content-Encoding заголовка сущности используется как модификатор типа носителя. При наличии его значение указывает, какие дополнительные кодировки содержимого были применены к телу сущности, а значит, какие механизмы декодирования необходимо применить для получения типа носителя, указанного в заголовке Content-Type.

property content_language: werkzeug.datastructures.HeaderSet

Поле Content-Language заголовка сущности описывает естественный язык(ы) целевой аудитории для вложенной сущности. Обратите внимание, что это может не соответствовать всем языкам, используемым в теле сущности.

content_length

Поле Content-Length заголовка сущности указывает размер тела сущности в десятичном числе байтов, отправленных получателю или, в случае метода HEAD, размер тела сущности, который был бы отправлен, если бы запрос был GET.

content_location

Поле Content-Location заголовка сущности МОЖЕТ использоваться для предоставления расположения ресурса для сущности, заключенной в сообщении, когда эта сущность доступна из расположения, отличного от URI запрашиваемого ресурса.

content_md5

Поле Content-MD5 заголовка сущности, как определено в RFC 1864, представляет собой хэш-код MD5 тела сущности для обеспечения проверки целостности сообщения от начала до конца (MIC) тела сущности. (Примечание: MIC подходит для обнаружения случайных изменений тела сущности во время передачи, но не является доказательством защиты от злонамеренных атак.)

property content_range: werkzeug.datastructures.ContentRange

Заголовок Content-Range как объект ContentRange. Доступен даже если заголовок не задан.

Журнал изменений

Введено в версии 0.7.

content_security_policy

Заголовок Content-Security-Policy добавляет дополнительный уровень безопасности для помощи в обнаружении и смягчении определенных типов атак.

content_security_policy_report_only

Заголовок Content-Security-Policy-Report-Only добавляет политику CSP, которая не применяется, но сообщается, что помогает обнаружить определенные типы атак.

content_type

Поле Content-Type заголовка сущности указывает тип носителя тела сущности, отправленного получателю, или, в случае метода HEAD, тип носителя, который был бы отправлен, если бы запрос был GET.

cross_origin_embedder_policy

Предотвращает загрузку документа любого ресурса кросс-оригина, который не предоставляет документу разрешение. Значения должны быть членом перечисления werkzeug.http.COEP.

cross_origin_opener_policy

Позволяет контролировать совместное использование группы контекстов просмотра с документами кросс-оригина. Значения должны быть членом перечисления werkzeug.http.COOP.

property data: Union[bytes, str]

Дескриптор, который вызывает get_data() и set_data().

date

Поле Date общего заголовка представляет собой дату и время, в которые было отправлено сообщение, имеющее такие же семантические значения, как orig-date в RFC 822.

Изменено в версии 2.0: Объект datetime имеет часовой пояс.

delete_cookie(key, path='/', domain=None, secure=False, httponly=False, samesite=None)

Удалить cookie. Не выводит сообщений об ошибках, если ключ не существует.

Параметры
  • key (str) – ключ (имя) cookie, который нужно удалить.
  • path (str) – если cookie, который нужно удалить, был ограничен путем, путь необходимо определить здесь.
  • domain (Optional[str]) – если cookie, который нужно удалить, был ограничен доменом, этот домен необходимо определить здесь.
  • secure (bool) – Если True, cookie будет доступен только через HTTPS.
  • httponly (bool) – запретить JavaScript-доступ к cookie.
  • samesite (Optional[str]) – ограничить область действия cookie только запросами, которые являются «одной страницей».
Тип возвращаемого значения

None

direct_passthrough

Передать тело ответа напрямую как итерируемый объект WSGI. Это может быть использовано, когда тело представляет собой двоичный файл или другой итератор байтов, чтобы пропустить некоторые ненужные проверки. Используйте send_file() вместо того, чтобы устанавливать это вручную.

expires

Поле Expires заголовка сущности указывает дату/время, после которой ответ считается устаревшим. Запись кэша, которая устарела, обычно не возвращается кэшем.

Изменено в версии 2.0: Объект datetime имеет часовой пояс.

classmethod force_type(response, environ=None)

Принудительно устанавливает, что ответ WSGI является объектом ответа текущего типа. Werkzeug будет использовать Response во многих ситуациях, таких как исключения. Если вы вызываете get_response() на исключении, вы получите обычный Response объект, даже если вы используете пользовательское подклассы.

Этот метод может принудительно установить заданный тип ответа, а также преобразовывать произвольные вызываемые объекты WSGI в объекты ответа, если предоставлен объект environ:

# convert a Werkzeug response object into an instance of the
# MyResponseClass subclass.
response = MyResponseClass.force_type(response)

# convert any WSGI application into a response object
response = MyResponseClass.force_type(response, environ)

Это особенно полезно, если вы хотите послеобработать ответы в основном диспетчере и использовать функциональные возможности, предоставляемые вашим подклассом.

Помните, что это может изменить объекты ответа на месте, если это возможно!

Parameters
  • response (Response) – объект ответа или приложение wsgi.
  • environ (Optional[WSGIEnvironment]) – объект среды WSGI.
Returns

объект ответа.

Return type

Response

freeze(no_etag=None)

Подготавливает объект ответа к сериализации с помощью pickle. Выполняет следующие действия:

  • Буферизует ответ в список, игнорируя implicity_sequence_conversion и direct_passthrough.
  • Устанавливает заголовок Content-Length.
  • Генерирует заголовок ETag если он не установлен.

Изменено в версии 2.0: Добавлен заголовок ETag, параметр no_etag устарел и будет удален в Werkzeug 2.1.

Журнал изменений

Изменено в версии 0.6: Установлен заголовок Content-Length.

Parameters

no_etag (None) –

Return type

None

classmethod from_app(app, environ, buffered=False)

Создает новый объект ответа из выходных данных приложения. Лучше всего подходит для передачи приложения, которое всегда возвращает генератор. Иногда приложения могут использовать вызываемый объект write(), возвращаемый функцией start_response. Это пытается автоматически разрешить такие крайние случаи. Но если вы не получаете ожидаемый результат, вы должны установить buffered в True, что принудительно буферизует.

Parameters
  • app (WSGIApplication) – приложение WSGI для выполнения.
  • environ (WSGIEnvironment) – объект среды WSGI для выполнения.
  • buffered (bool) – установить в True для принудительной буферизации.
Returns

объект ответа.

Return type

Response

get_app_iter(environ)

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

Если метод запроса HEAD, или код состояния находится в диапазоне, где спецификация HTTP требует пустого ответа, возвращается пустая итерируемая последовательность.

Журнал изменений

Добавлен в версии 0.6.

Parameters

environ (WSGIEnvironment) – среда WSGI запроса.

Returns

итерируемый объект ответа.

Return type

Iterable[bytes]

get_data(as_text=False)

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

Это поведение можно отключить, установив implicit_sequence_conversion в False.

Если as_text установлено в True, возвращаемое значение будет декодированной строкой.

Журнал изменений

Добавлен в версии 0.9.

Parameters

as_text (bool) –

Return type

Union[bytes, str]

get_etag()

Возвращает кортеж в виде (etag, is_weak). Если ETag отсутствует, возвращаемое значение (None, None).

Return type

Union[Tuple[str, bool], Tuple[None, None]]

get_json(force=False, silent=False)

Парсит data как JSON. Полезно во время тестирования.

Если тип MIME не указывает JSON (application/json, см. is_json()), возвращает None.

В отличие от Request.get_json(), результат не кэшируется.

Parameters
  • force (bool) – Игнорировать тип MIME и всегда пытаться разобрать JSON.
  • silent (bool) – Скрыть ошибки разбора и вернуть None вместо этого.
Return type

Optional[Any]

get_wsgi_headers(environ)

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

Например, заголовок location (если он есть) объединяется с корневым URL-адресом среды. Также для определенных кодов состояния длина содержимого здесь автоматически устанавливается в ноль.

Журнал изменений

Изменено в версии 0.6: Ранее эта функция называлась fix_headers и изменяла объект ответа на месте. Также начиная с 0.6, IRIs в заголовках location и content-location обрабатываются правильно.

Также начиная с 0.6, Werkzeug будет пытаться установить длину содержимого, если сможет самостоятельно это определить. Это происходит в том случае, если все строки в итерируемом объекте ответа уже закодированы, а итерируемый объект буферизован.

Parameters

environ (WSGIEnvironment) – среда WSGI запроса.

Returns

возвращает новый Headers объект.

Return type

werkzeug.datastructures.Headers

get_wsgi_response(environ)

Возвращает окончательный ответ WSGI в виде кортежа. Первый элемент кортежа — итератор приложения, второй — код состояния, а третий — список заголовков. Возвращаемый ответ создается специально для заданной среды. Например, если метод запроса в среде WSGI равен 'HEAD', ответ будет пустым, и будут присутствовать только заголовки и код состояния.

Changelog

Добавлена в версии 0.6.

Параметры

environ (WSGIEnvironment) — среда WSGI запроса.

Возвращает

кортеж (app_iter, status, headers).

Тип возвращаемого значения

Tuple[Iterable[байты], строка, List[Tuple[строка, строка]]]

implicit_sequence_conversion = True

если установлено значение False, доступ к свойствам объекта ответа не будет пытаться извлечь итератор ответа и преобразовать его в список.

Changelog

Добавлена в версии 0.6.2: Это свойство ранее называлось implicit_seqence_conversion. (Обратите внимание на ошибку в написании). Если вы использовали эту функцию, вам необходимо адаптировать свой код к изменению названия.

property is_json: bool

Проверка, указывает ли MIME-тип на данные JSON, либо application/json, либо application/*+json.

property is_sequence: bool

Если итератор буферизован, это свойство будет True. Объект ответа будет считать итератор буферизованным, если атрибут ответа является списком или кортежем.

Changelog

Добавлена в версии 0.6.

property is_streamed: bool

Если ответ передаётся потоками (ответ не является итерируемым объектом с информацией о длине), это свойство равно True. В этом случае потоковая передача означает, что нет информации о количестве итераций. Это обычно True если в объект ответа передаётся генератор.

Это полезно для проверки перед применением некоторого вида постфильтрации, которая не должна выполняться для потоковых ответов.

iter_encoded()

Итерация по закодированному ответу с кодировкой ответа. Если объект ответа вызывается как WSGI-приложение, возвращаемое значение этого метода используется в качестве итератора приложения, если direct_passthrough не был активирован.

Тип возвращаемого значения

Iterator[байты]

property json: Optional[Any]

Парсированные данные JSON, если mimetype указывает на JSON (application/json, см. is_json()).

Вызывает get_json() с аргументами по умолчанию.

json_module = <module 'json' from '/home/docs/.pyenv/versions/3.7.9/lib/python3.7/json/__init__.py'>

Модуль или другой объект, содержащий функции dumps и loads, соответствующие API встроенного модуля json.

last_modified

Поле заголовка сущности Last-Modified указывает дату и время, когда исходный сервер считает, что вариант был в последний раз изменён.

Изменено в версии 2.0: Объект datetime имеет информацию о часовом поясе.

location

Поле заголовка ответа Location используется для перенаправления получателя в другое местоположение, отличное от Request-URI, для завершения запроса или идентификации нового ресурса.

make_conditional(request_or_environ, accept_ranges=False, complete_length=None)

Делает ответ условным для запроса. Этот метод лучше всего работает, если для ответа уже определён etag. Метод add_etag может быть использован для этого. Если вызывается без etag, устанавливается только заголовок даты.

Не выполняет никаких действий, если метод запроса в запросе или среде отличается от GET или HEAD.

Для оптимальной производительности при обработке запросов диапазона рекомендуется, чтобы ваш объект данных ответа реализовывал методы seekable, seek и tell, как описано в io.IOBase. Объекты, возвращаемые wrap_file(), автоматически реализуют эти методы.

Не удаляет тело ответа, потому что это делает за нас функция __call__().

Возвращает self, так что вы можете выполнить return resp.make_conditional(req), но изменяет объект на месте.

Параметры
  • request_or_environ (WSGIEnvironment) — объект запроса или WSGI-среда, используемые для условного определения ответа.
  • accept_ranges (Union[bool, строка]) — этот параметр определяет значение заголовка Accept-Ranges. Если False (значение по умолчанию), заголовок не устанавливается. Если True, он будет установлен в значение "bytes". Если None, он будет установлен в значение "none". Если это строка, она используется как значение.
  • complete_length (Optional[целое число]) — используется только в допустимых запросах диапазона. Он установит значение полной длины Content-Range и вычислит фактическое значение Content-Length. Этот параметр обязателен для успешного завершения запросов диапазона.
Исключения

RequestedRangeNotSatisfiable, если заголовок Range не удалось разобрать или удовлетворить.

Тип возвращаемого значения

Response

Изменено в версии 2.0: Обработка диапазона пропускается, если длина равна 0, вместо того, чтобы выводить ошибку 416 Range Not Satisfiable.

make_sequence()

Преобразует итератор ответа в список. По умолчанию это происходит автоматически, если необходимо. Если implicit_sequence_conversion отключено, этот метод не вызывается автоматически, и некоторые свойства могут вызывать исключения. Это также кодирует все элементы.

Changelog

Добавлена в версии 0.6.

Тип возвращаемого значения

None

property mimetype: Optional[str]

MIME-тип (тип содержимого без кодировки и т. д.).

property mimetype_params: Dict[str, str]

Параметры MIME-типа в виде словаря. Например, если тип содержимого равен text/html; charset=utf-8, параметры будут {'charset': 'utf-8'}.

Changelog

Добавлена в версии 0.5.

response: Union[Iterable[str], Iterable[bytes]]

Тело ответа для отправки в качестве итерируемого объекта WSGI. Список строк или байтов представляет собой ответ фиксированной длины, любой другой итерируемый объект — ответ в потоковом режиме. Строки кодируются в байты в формате UTF-8.

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

property retry_after: Optional[datetime.datetime]

Поле заголовка ответа Retry-After может использоваться с ответом 503 (Сервис недоступен) для указания, как долго сервис, по прогнозу, будет недоступен для клиента, отправляющего запрос.

Время в секундах до истечения срока действия или дата.

Изменено в версии 2.0: Объект datetime учитывает часовой пояс.

set_cookie(key, value='', max_age=None, expires=None, path='/', domain=None, secure=False, httponly=False, samesite=None)

Устанавливает cookie.

Выдается предупреждение, если размер заголовка cookie превышает max_cookie_size, но заголовок все равно будет установлен.

Параметры
  • key (str) – ключ (имя) cookie для установки.
  • value (str) – значение cookie.
  • max_age (Optional[Union[datetime.timedelta, int]]) – должно быть числом секунд, или None (по умолчанию), если cookie должно действовать только в течение сессии браузера клиента.
  • expires (Optional[Union[str, datetime.datetime, int, float]]) – должно быть объектом datetime, или меткой времени Unix.
  • path (Optional[str]) – ограничивает cookie заданным путём, по умолчанию он будет охватывать весь домен.
  • domain (Optional[str]) – если вы хотите установить cookie для другого домена. Например, domain=".example.com" установит cookie, доступный для домена www.example.com, foo.example.com и т. д. В противном случае cookie будет доступен только для домена, который его установил.
  • secure (bool) – Если True, cookie будет доступен только через HTTPS.
  • httponly (bool) – Запретить доступ к cookie из JavaScript.
  • samesite (Optional[str]) – Ограничить область действия cookie только запросами, которые являются «same-site».
Тип возвращаемого значения

None

set_data(value)

Устанавливает новую строку в качестве ответа. Значение должно быть строкой или байтами. Если установлена строка, она кодируется в соответствии с кодировкой ответа (по умолчанию utf-8).

Журнал изменений

Добавлена в версии 0.9.

Параметры

value (Union[bytes, str]) –

Тип возвращаемого значения

None

set_etag(etag, weak=False)

Установить etag и переопределить старое значение, если оно существовало.

Параметры
  • etag (str) –
  • weak (bool) –
Тип возвращаемого значения

None

property status: str

Код HTTP-статуса в виде строки.

property status_code: int

Код HTTP-статуса в виде числа.

property stream: werkzeug.wrappers.response.ResponseStream

Итерируемый объект ответа как поток только для записи.

property vary: werkzeug.datastructures.HeaderSet

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

property www_authenticate: werkzeug.datastructures.WWWAuthenticate

Заголовок WWW-Authenticate в обработанном виде.

© 2007–2021 Pallets
Licensed under the BSD 3-clause License.
https://werkzeug.palletsprojects.com/en/2.0.x/wrappers/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API