Spec-Zone.ru › Werkzeug 2.1

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

Объекты запроса и ответа оборачивают 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.1: Удалить атрибут disable_data_descriptor.

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

Изменено в версии 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]) – длина этого файла. Это значение обычно не предоставляется, так как веб-браузеры не предоставляют его.
Тип возвращаемого значения

IO[bytes]

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[[Request], WSGIApplication]) – декоративное WSGI-вызываемое действие

Возвращает

новое WSGI-вызываемое действие

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

WSGIApplication

property args: werkzeug.datastructures.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 подходит для обнаружения случайных изменений тела сущности во время передачи, но не является доказательством защиты от злонамеренных атак.)

Changelog

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

content_type

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

property cookies: werkzeug.datastructures.ImmutableMultiDict[str, str]

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

property data: bytes

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

date

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

Changelog

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

dict_storage_class

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

environ: WSGIEnvironment

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

property files: werkzeug.datastructures.ImmutableMultiDict[str, werkzeug.datastructures.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: werkzeug.datastructures.ImmutableMultiDict[str, str]

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

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

Changelog

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

form_data_parser_class

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

classmethod from_values(*args, **kwargs)

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

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

Changelog

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

Возвращает

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

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

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, возвращаемое значение будет декодированной строкой.

Changelog

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

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

Union[bytes, str]

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

Обработать data как JSON.

Если тип MIME не указывает на JSON (application/json, см. is_json), или при разборе произошла ошибка, вызывается on_json_loading_failed(), и её значение используется в качестве возвращаемого значения. По умолчанию это приводит к ошибке 400 Bad Request.

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

Optional[Any]

Изменено в версии 2.1: Выводить ошибку 400, если тип содержимого некорректен.

headers

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

property host: str

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

property host_url: str

Схема URL запроса и только хост.

property if_match: werkzeug.datastructures.ETags

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

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

ETags

property if_modified_since: Optional[datetime.datetime]

Обработанный заголовок If-Modified-Since в виде объекта datetime.

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

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

property if_none_match: werkzeug.datastructures.ETags

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

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

ETags

property if_range: werkzeug.datastructures.IfRange

Обработанный заголовок If-Range.

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

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

Добавлена в версии 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() с аргументами по умолчанию.

Если тип содержимого запроса не application/json, это вызовет ошибку 400 Bad Request.

Изменено в версии 2.1: Выводить ошибку 400, если тип содержимого некорректен.

json_module = <module 'json' from '/home/docs/.asdf/installs/python/3.10.0/lib/python3.10/json/__init__.py'>

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

list_storage_class

псевдоним werkzeug.datastructures.ImmutableList

make_form_data_parser()

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

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

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

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

werkzeug.formparser.FormDataParser

max_content_length: Optional[int] = None

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

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

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

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

max_form_memory_size: Optional[int] = None

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

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

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

Введено в версии 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.

Параметры

e (Optional[ValueError]) – Если разбор не удался, это исключение. Оно будет None если тип содержимого не application/json.

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

Any

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.

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

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

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

Range

referrer

Поле заголовка запроса Referer позволяет клиенту указать, для пользы сервера, адрес (URI) ресурса, из которого был получен Request-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: IO[bytes]

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

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

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

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

property url: str

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

property url_charset: str

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

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

Введено в версии 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 для обеспечения разбора других свойств или других расширенных данных.

Changelog

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

user_agent_class

Псевдоним werkzeug.user_agent.UserAgent

property values: werkzeug.datastructures.CombinedMultiDict[str, str]

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

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

Changelog

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

property want_form_data_parsed: bool

True , если метод запроса несёт данные. По умолчанию это 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)

Добавить тег ответа, если его еще нет.

Изменения

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

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

None

age

Поле заголовка ответа Age сообщает об оценке отправителем времени, прошедшего с момента генерации ответа (или его повторной проверки) на сервере источника.

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

property allow: werkzeug.datastructures.HeaderSet

Поле Allow указывает набор методов, поддерживаемых ресурсом, идентифицируемым Request-URI. Цель этого поля — просто проинформировать получателя о допустимых методах, связанных с ресурсом. Заголовок Allow ДОЛЖЕН присутствовать в ответе 405 (Method Not Allowed).

autocorrect_location_header = False

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

Изменено в версии 2.1: По умолчанию эта функция отключена, поэтому ответы будут отправлять относительные перенаправления.

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

Новое в версии 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 тела сущности для целей проверки целостности сообщения сущности end-to-end (MIC). (Примечание: MIC подходит для обнаружения случайных изменений тела сущности в процессе передачи, но не является доказательством против злонамеренных атак.)

property content_range: werkzeug.datastructures.ContentRange

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

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

Новое в версии 0.7.

property content_security_policy: werkzeug.datastructures.ContentSecurityPolicy

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

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

property content_security_policy_report_only: werkzeug.datastructures.ContentSecurityPolicy

Заголовок Content-Security-policy-report-only в виде объекта ContentSecurityPolicy. Доступен даже если заголовок не установлен.

Заголовок 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

END_OF_DOCUMENT_MARKER
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)

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

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

Параметры
  • response (Ответ) – объект ответа или WSGI приложение.
  • environ (Необязательно[WSGIEnvironment]) – объект WSGI среды.
Возвращает

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

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

Ответ

freeze()

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

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

Изменено в версии 2.1: Параметр no_etag удалён.

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

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

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

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

None

classmethod from_app(app, environ, buffered=False)

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

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

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

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

Ответ

get_app_iter(environ)

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

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

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

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

Параметры

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

Возвращает

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

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

Iterable[bytes]

get_data(as_text=False)

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

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

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

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

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

Параметры

as_text (bool) –

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

Union[bytes, str]

get_etag()

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

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

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(), результат не кэшируется.

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

Необязательно[Любой]

get_wsgi_headers(environ)

Этот метод вызывается автоматически незадолго до запуска ответа и возвращает заголовки, изменённые для данного окружения. Он возвращает копию заголовков из ответа с некоторыми изменениями, если это необходимо.

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

Изменения

Изменено в версии 0.6: Ранее эта функция называлась fix_headers и изменяла объект ответа на месте. Также с версии 0.6 Werkzeug правильно обрабатывает URI в заголовках расположения и расположения содержимого.

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

Параметры

environ (WSGIEnvironment) – окружение WSGI запроса.

Возвращает

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

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

werkzeug.datastructures.Headers

get_wsgi_response(environ)

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

Изменения

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

Параметры

environ (WSGIEnvironment) – окружение WSGI запроса.

Возвращает

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

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

Tuple[Iterable[bytes], str, List[Tuple[str, str]]]

implicit_sequence_conversion = True

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

Изменения

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

property is_json: bool

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

property is_sequence: bool

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

Изменения

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

property is_streamed: bool

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

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

iter_encoded()

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

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

Iterator[bytes]

property json: Optional[Any]

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

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

json_module = <module 'json' from '/home/docs/.asdf/installs/python/3.10.0/lib/python3.10/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)

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

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

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

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

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

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

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

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

Response

Изменения

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

make_sequence()

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

Изменения

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

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

None

property mimetype: Optional[str]

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

property mimetype_params: Dict[str, str]

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

Изменения

Добавлен в версии 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)

Устанавливает куки.

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

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

None

set_data(value)

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

Changelog

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

Параметры

значение (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–2022 Pallets
Licensed under the BSD 3-clause License.
https://werkzeug.palletsprojects.com/en/2.1.x/wrappers/

Spec-Zone.ru

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