Объекты запроса/ответа
Объекты запроса и ответа оборачивают среду 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 пытается оградить вас от распространённых ошибок, запрещая определённые действия по мере возможности. Это служит двум целям: высокой производительности и предотвращения ошибок.
Для объекта запроса применяются следующие правила:
- Объект запроса неизменяемый. Изменения по умолчанию не поддерживаются, но вы можете заменить неизменяемые атрибуты на изменяемые, если вам нужно его изменить.
- Объект запроса может быть общим в рамках одного потока, но сам по себе не потокобезопасен. Если вам нужно получить к нему доступ из нескольких потоков, используйте блокировки вокруг вызовов.
- Невозможно выполнить сериализацию объекта запроса с помощью pickle.
Для объекта ответа применяются следующие правила:
- Объект ответа изменяемый.
- Объект ответа можно сериализовать с помощью pickle или скопировать после вызова
freeze(). - Начиная с Werkzeug 0.6, безопасно использовать один и тот же объект ответа для нескольких ответов WSGI.
- Можно создавать копии, используя
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, что сделает их недоступными для конечного приложения.
Журнал изменений
Изменено в версии 2.1: Удалить атрибут
disable_data_descriptor.Изменено в версии 2.0: Объединить
BaseRequestи mixins в один класс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]) – Длина этого файла. Это значение обычно не предоставляется, потому что веб-браузеры не предоставляют это значение.
- Тип возвращаемого значения:
-
property accept_charsets: CharsetAccept -
Список кодировок символов, поддерживаемых этим клиентом, как объект
CharsetAccept.
-
property accept_encodings: Accept -
Список кодировок, принимаемых этим клиентом. Кодировки в терминологии HTTP — это кодировки сжатия, такие как gzip. Для кодировок символов см.
accept_charset.
-
property accept_languages: LanguageAccept -
Список языков, принимаемых этим клиентом, как объект
LanguageAccept.
-
property accept_mimetypes: MIMEAccept -
Список MIME-типов, поддерживаемых этим клиентом, как объект
MIMEAccept.
-
access_control_request_headers -
Отправляется с предварительным запросом для указания заголовков, которые будут отправлены с запросом кросс-доменного ресурса. Установите
access_control_allow_headersв ответе, чтобы указать разрешённые заголовки.
-
access_control_request_method -
Отправляется с предварительным запросом для указания метода, который будет использоваться для запроса кросс-доменного ресурса. Установите
access_control_allow_methodsв ответе, чтобы указать разрешённые методы.
-
property access_route: List[str] -
Если существует заголовок forwarded, это список всех IP-адресов от IP-адреса клиента до последнего прокси-сервера.
-
classmethod application(f) -
Декорирует функцию как обработчик, который принимает запрос в качестве последнего аргумента. Это работает как декоратор
responder(), но функция получает объект запроса в качестве последнего аргумента, а объект запроса закрывается автоматически:@Request.application def my_wsgi_app(request): return Response('Hello World!')С Werkzeug 0.14 HTTP-исключения автоматически перехватываются и преобразуются в ответы вместо аварийного завершения.
-
property args: MultiDict[str, str] -
Обработанные параметры URL (часть URL после знака вопроса).
По умолчанию из этой функции возвращается
ImmutableMultiDict. Это можно изменить, установивparameter_storage_classна другой тип. Это может потребоваться, если порядок данных формы важен.
-
property authorization: Optional[Authorization] -
Объект
Authorizationв обработанном виде.
-
property base_url: str -
Как
url, но без строки запроса.
-
property cache_control: RequestCacheControl -
Объект
RequestCacheControlдля входящих заголовков управления кэшем.
-
charset = 'utf-8' -
Кодировка символов, используемая для декодирования большей части данных в запросе.
-
close() -
Закрывает связанные ресурсы этого объекта запроса. Это закрывает все файловые дескрипторы явно. Вы также можете использовать объект запроса в операторе with, что автоматически закроет его.
Журнал изменений
Добавлено в версии 0.9.
- Тип возвращаемого значения:
-
None
-
content_encoding -
Поле заголовка сущности Content-Encoding используется в качестве модификатора медиа-типа. При его наличии значение указывает, какие дополнительные кодировки содержимого были применены к телу сущности, и, следовательно, какие механизмы декодирования необходимо применить для получения медиа-типа, указанного в поле заголовка Content-Type.
Changelog
Добавлена в версии 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: ImmutableMultiDict[str, str] -
Словарь
dictс содержимым всех куки, переданных вместе с запросом.
-
property data: bytes -
Содержит данные входящего запроса в виде строки, если они были отправлены с типом mime, который не обрабатывается Werkzeug.
-
date -
Поле общего заголовка Date представляет собой дату и время, в которые было создано сообщение, имеющее те же семантику, что и orig-date в RFC 822.
Changelog
Изменено в версии 2.0: Объект datetime имеет информацию о часовом поясе.
-
dict_storage_class -
Псевдоним
ImmutableMultiDict
-
encoding_errors = 'replace' -
Процедура обработки ошибок, по умолчанию «replace»
-
environ: WSGIEnvironment -
WSGI-среда, содержащая HTTP-заголовки и информацию от WSGI-сервера.
-
property files: ImmutableMultiDict[str, FileStorage] -
MultiDictобъект, содержащий все загруженные файлы. Каждый ключ вfiles— имя из<input type="file" name="">. Каждое значение вfiles— объект WerkzeugFileStorage.По сути, ведет себя как обычный объект файла из Python, с той разницей, что у него также есть функция
save(), которая может сохранить файл в файловой системе.Обратите внимание, что
filesбудет содержать данные только если метод запроса был POST, PUT или PATCH и<form>который был отправлен в запрос имелenctype="multipart/form-data". В противном случае он будет пустым.См. документацию
MultiDict/FileStorageдля получения более подробной информации о используемой структуре данных.
-
property form: ImmutableMultiDict[str, str] -
Параметры формы. По умолчанию функция возвращает
ImmutableMultiDict. Это можно изменить, задавparameter_storage_classна другой тип. Это может потребоваться, если порядок данных формы важен.Пожалуйста, имейте в виду, что загрузки файлов не попадут сюда, а вместо этого в атрибут
files.Changelog
Изменено в версии 0.9: До Werkzeug 0.9 это содержало только данные формы для запросов POST и PUT.
-
form_data_parser_class -
Псевдоним
FormDataParser
-
classmethod from_values(*args, **kwargs) -
Создаёт новый объект запроса на основе предоставленных значений. Если environ задан, отсутствующие значения заполняются оттуда. Этот метод полезен для небольших скриптов, когда вам нужно смоделировать запрос из URL. Не используйте этот метод для юнит-тестирования, существует полнофункциональный объект клиента (
Client), который позволяет создавать multipart-запросы, поддерживать куки и т.д.Принимает те же опции, что и
EnvironBuilder.Changelog
Изменено в версии 0.5: Этот метод теперь принимает те же аргументы, что и
EnvironBuilder. Из-за этого параметрenvironтеперь называетсяenviron_overrides.
-
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.
-
get_json(force=False, silent=False, cache=True) -
Обработать
dataкак JSON.Если тип MIME не указывает JSON (application/json, см.
is_json), или при разборе произошла ошибка,on_json_loading_failed()вызывается, и её возвращаемое значение используется в качестве возвращаемого значения. По умолчанию это вызывает ошибку 400 Bad Request.- Параметры:
- Тип возвращаемого значения:
Changelog
Изменено в версии 2.1: Вызывать ошибку 400, если тип содержимого неверен.
-
headers -
Заголовки, полученные с запросом.
-
property host: str -
Имя хоста, к которому был сделан запрос, включая порт, если он нестандартный. Валидируется с помощью
trusted_hosts.
-
property host_url: str -
Схема и хост URL запроса.
-
property if_match: ETags -
Объект, содержащий все теги в заголовке
If-Match.- Тип возвращаемого значения:
-
property if_modified_since: Optional[datetime] -
Обработанный заголовок
If-Modified-Sinceкак объект datetime.Changelog
Изменено в версии 2.0: Объект datetime с часовым поясом.
-
property if_none_match: ETags -
Объект, содержащий все теги в заголовке
If-None-Match.- Тип возвращаемого значения:
-
property if_range: IfRange -
Обработанный заголовок
If-Range.Changelog
Изменено в версии 2.0:
IfRange.dateс часовым поясом.Новое в версии 0.7.
-
property if_unmodified_since: Optional[datetime] -
Обработанный заголовок
If-Unmodified-Sinceкак объект datetime.Changelog
Изменено в версии 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.Changelog
Изменено в версии 2.1: Вызывать ошибку 400, если тип содержимого неверен.
-
json_module = <module 'json' from '/home/docs/.asdf/installs/python/3.10.4/lib/python3.10/json/__init__.py'> -
Модуль или другой объект, имеющий функции
dumpsиloads, соответствующие API встроенного модуляjson.
-
-
list_storage_class -
Псевдоним для
ImmutableList
-
make_form_data_parser() -
Создаёт парсер данных формы. Инициализирует
form_data_parser_classс некоторыми параметрами.Журнал изменений
Новая версия с 0.8.
- Тип возвращаемого значения:
-
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. - Тип возвращаемого значения:
-
origin -
Хост, откуда исходит запрос. Установите
access_control_allow_originв ответе, чтобы указать разрешённые источники.
-
parameter_storage_class -
Псевдоним для
ImmutableMultiDict
-
path -
Часть пути URL после
root_path. Это путь, используемый для маршрутизации в приложении.
-
property pragma: HeaderSet -
Поле заголовка Pragma используется для включения реализационных директив, которые могут применяться к любому получателю в цепочке запроса/ответа. Все директивы pragma указывают на необязательное поведение с точки зрения протокола; однако некоторые системы МОГУТ потребовать, чтобы это поведение соответствовало директивам.
-
query_string -
Часть URL после “?”. Это исходное значение, используйте
argsдля проанализированных значений.
-
property range: Optional[Range] -
Разбор заголовка
Range.Журнал изменений
Новая версия с 0.7.
- Тип возвращаемого значения:
-
referrer -
Поле заголовка Referer позволяет клиенту указать для блага сервера адрес (URI) ресурса, из которого был получен Request-URI (так называемый «referrer», хотя в поле заголовка допущена ошибка в написании).
-
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. Полезно для предотвращения изменения потока из middleware.
-
-
property stream: IO[bytes] -
Если входящие данные формы не были закодированы с известным типом MIME, данные хранятся в этом потоке без изменений для потребления. В большинстве случаев лучше использовать
data, который предоставит эти данные в виде строки. Поток возвращает данные только один раз.В отличие от
input_stream, этот поток надёжно защищён, чтобы случайно не считывать данные, выходящие за пределы длины ввода. Werkzeug всегда будет обращаться к этому потоку для чтения данных, что позволяет обернуть этот объект потоком, выполняющим фильтрацию.Изменения
Изменено в версии 0.9: Этот поток теперь всегда доступен, но может быть использован парсером формы позднее. Ранее поток устанавливался только если не происходило парсинга.
-
trusted_hosts: t.Optional[t.List[str]] = None -
Допустимые имена хостов при обработке запросов. По умолчанию все хосты доверяются, что означает, что принимаемый от клиента хост будет принят.
Поскольку
HostиX-Forwarded-Hostзаголовки могут быть установлены на любое значение вредоносным клиентом, рекомендуется либо установить это свойство, либо реализовать подобную валидацию в прокси-сервере (если приложение работает за ним).Изменения
Добавлен в версии 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: UserAgent -
Пользовательский агент. Используйте
user_agent.stringдля получения значения заголовка. Установитеuser_agent_classна подклассUserAgent, чтобы обеспечить парсинг других свойств или других расширенных данных.Изменения
Изменено в версии 2.0: Встроенный парсер устарел и будет удалён в Werkzeug 2.1. Необходимо установить подкласс
UserAgentдля парсинга данных из строки.
-
user_agent_class -
Псевдоним для
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если метод запроса несёт контент. По умолчанию это true, если отправленContent-Type.Изменения
Добавлен в версии 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, HTTPStatus]]) – Код состояния ответа. Либо целое число, в этом случае добавляется сообщение по умолчанию, либо строка в формате
{code} {message}, например,404 Not Found. По умолчанию 200. -
headers (Headers) – Объект
Headersили список кортежей(key, value), которые будут преобразованы в объектHeaders. -
mimetype (Optional[str]) – Тип MIME (тип содержимого без набора символов или других параметров) ответа. Если значение начинается с
text/(или соответствует некоторым другим особым случаям), набор символов будет добавлен для созданияcontent_type. -
content_type (Optional[str]) – Полный тип содержимого ответа. Переопределяет построение значения из
mimetype. -
direct_passthrough (bool) – Передать тело ответа напрямую как WSGI-итерируемый объект. Это можно использовать, когда тело является двоичным файлом или другим итератором байтов, чтобы пропустить некоторые ненужные проверки. Вместо ручного задания используйте
send_file().
Изменения
Изменено в версии 2.0: Объединить
BaseResponseи миксины в один классResponse. Использование старых классов устарело и будет удалено в Werkzeug 2.1.Изменено в версии 0.5: Добавлен параметр
direct_passthrough.-
__call__(environ, start_response) -
Обработать этот ответ как WSGI-приложение.
-
_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 может быть недоступен в некоторых средах.
-
age -
Поле заголовка ответа Age сообщает об оценке времени, прошедшего с момента создания (или повторной проверки) ответа на сервере-источнике.
Значения Age — неотрицательные десятичные целые числа, представляющие время в секундах.
-
property allow: HeaderSet -
Поле Allow в сообщении-заголовке указывает набор методов, поддерживаемых ресурсом, идентифицируемым URI запроса. Цель этого поля — проинформировать получателя о допустимых методах, связанных с ресурсом. Заголовок Allow ОБЯЗАТЕЛЬНО должен быть присутствующим в ответе 405 (Метод запрещён).
-
autocorrect_location_header = False -
Если заголовок перенаправления
Locationявляется относительным URL, сделайте его абсолютным URL, включая схему и домен.Changelog
Изменено в версии 2.1: По умолчанию это отключено, поэтому ответы будут отправлять относительные перенаправления.
Добавлена в версии 0.8.
-
automatically_set_content_length = True -
Должен ли этот объект ответа автоматически устанавливать заголовок content-length, если это возможно? По умолчанию это true.
Changelog
Добавлена в версии 0.8.
-
property cache_control: ResponseCacheControl -
Поле заголовка Cache-Control используется для указания директив, которые должны выполняться всеми механизмами кэширования вдоль цепочки запроса/ответа.
-
calculate_content_length() -
Возвращает длину содержимого, если она доступна, или
Noneв противном случае.
-
call_on_close(func) -
Добавляет функцию в внутренний список функций, которые должны быть вызваны в рамках закрытия ответа. Начиная с версии 0.7, эта функция также возвращает функцию, которая была передана, чтобы это можно было использовать как декоратор.
Changelog
Добавлена в версии 0.6.
-
charset = 'utf-8' -
кодировка символов ответа.
-
close() -
Закрыть обернутый ответ, если это возможно. Вы также можете использовать объект в операторе with, который автоматически закроет его.
Changelog
Добавлена в версии 0.9: Теперь можно использовать в операторе with.
- Тип возвращаемого значения:
-
None
-
content_encoding -
Поле заголовка Content-Encoding используется как модификатор типа медиа. При наличии его значение указывает, какие дополнительные кодировки содержимого были применены к телу сущности, и, следовательно, какие механизмы декодирования должны быть применены для получения типа медиа, на который ссылается заголовок Content-Type.
-
property content_language: 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: ContentRange -
Заголовок
Content-Rangeв виде объектаContentRange. Доступен даже если заголовок не задан.Changelog
Добавлена в версии 0.7.
-
property content_security_policy: ContentSecurityPolicy -
Заголовок
Content-Security-Policyв виде объектаContentSecurityPolicy. Доступен даже если заголовок не задан.Заголовок Content-Security-Policy добавляет дополнительный уровень безопасности, который помогает обнаруживать и смягчать определенные типы атак.
-
property content_security_policy_report_only: 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.
Changelog
Изменено в версии 2.0: Объект datetime имеет часовой пояс.
-
default_mimetype: Optional[str] = 'text/plain' -
тип MIME по умолчанию, если он не указан.
-
default_status = 200 -
статус по умолчанию, если он не указан.
-
-
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) – Запретить доступ к cookie через JavaScript.
- 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)
Это особенно полезно, если вы хотите обработать ответы в основном диспетчере и использовать функциональные возможности, предоставляемые вашим подклассом.
Обратите внимание, что этот метод может изменять объекты ответов на месте, если это возможно!
-
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, что принуждает к буферизации.
-
get_app_iter(environ) -
Возвращает итератор приложения для данной среды. В зависимости от метода запроса и текущего кода состояния возвращаемое значение может быть пустым ответом вместо ответа.
Если метод запроса —
HEADили код состояния находится в диапазоне, где спецификация HTTP требует пустой ответ, возвращается пустая итерируемая последовательность.Изменения
Добавлена в версии 0.6.
-
get_data(as_text=False) -
Строковое представление тела ответа. При каждом вызове этого свойства итерируемая последовательность ответа кодируется и выравнивается. Это может привести к нежелательному поведению при обработке больших данных.
Это поведение можно отключить, установив
implicit_sequence_conversionвFalse.Если
as_textустановлено вTrue, возвращаемое значение будет строкой с декодированием.Изменения
Добавлена в версии 0.9.
-
-
get_etag() -
Возвращает кортеж в форме
(etag, is_weak). Если ETag отсутствует, возвращаемое значение равно(None, None).
-
get_json(force=False, silent=False) -
Разбирает
dataкак JSON. Полезно во время тестирования.Если MIME-тип не указывает на JSON (application/json, см.
is_json), это возвращаетNone.В отличие от
Request.get_json(), результат не кэшируется.
-
get_wsgi_headers(environ) -
Это автоматически вызывается непосредственно перед запуском ответа и возвращает заголовки, измененные для данной среды. Он возвращает копию заголовков из ответа с некоторыми примененными изменениями, если это необходимо.
Например, заголовок location (если он присутствует) объединяется с корневым URL-адресом среды. Кроме того, длина содержимого автоматически устанавливается в ноль для определенных кодов состояния.
Журнал изменений
Изменено в версии 0.6: Ранее эта функция называлась
fix_headersи изменяла объект ответа на месте. Также начиная с версии 0.6, IRI в заголовках location и content-location обрабатываются правильно.Кроме того, начиная с версии 0.6, Werkzeug будет пытаться установить длину содержимого, если сможет самостоятельно ее определить. Это происходит, если все строки в итераторе ответа уже закодированы, а итератор буферизован.
-
get_wsgi_response(environ) -
Возвращает окончательный ответ WSGI в виде кортежа. Первый элемент кортежа — итератор приложения, второй — состояние, а третий — список заголовков. Возвращаемый ответ создается специально для данной среды. Например, если метод запроса в среде WSGI равен
'HEAD', ответ будет пустым, и будут присутствовать только заголовки и код состояния.Журнал изменений
Новое в версии 0.6.
-
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. Объект ответа будет считать итератор буферизованным, если атрибут ответа является списком или кортежем.Журнал изменений
Новое в версии 0.6.
-
property is_streamed: bool -
Если ответ передается потоком (ответ не является итератором с информацией о длине), это свойство равно
True. В этом случае потоковый означает, что нет информации о количестве итераций. Это обычноTrue, если генератор передается объекту ответа.Это полезно для проверки перед применением какой-либо пост-фильтрации, которая не должна выполняться для потоковых ответов.
-
iter_encoded() -
Итерировать ответ, закодированный с кодировкой ответа. Если объект ответа вызывается как приложение WSGI, возвращаемое значение этого метода используется как итератор приложения, если только
direct_passthroughне был активирован.
-
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.4/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) -
Устанавливает условие для ответа на запрос. Этот метод лучше всего работает, если для ответа уже определён etag. Метод
add_etagможет быть использован для этого. Если вызов производится без etag, устанавливается только заголовок даты.Ничего не делает, если метод запроса в запросе или окружении — не GET или HEAD.
Для оптимальной производительности при обработке запросов диапазона рекомендуется, чтобы ваш объект данных ответа реализовывал методы
seekable,seekиtell, как описано вio.IOBase. Объекты, возвращаемыеwrap_file(), автоматически реализуют эти методы.Не удаляет тело ответа, так как за это отвечает функция
__call__().Возвращает self, позволяя вам
return resp.make_conditional(req), но изменяет объект на месте.- Parameters:
-
- 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. Этот параметр обязателен для успешного завершения запросов диапазона.
- Raises:
-
RequestedRangeNotSatisfiable, если заголовокRangeне удалось разобрать или удовлетворить. - Return type:
Changelog
Изменено в версии 2.0: Обработка диапазона пропускается, если длина равна 0, вместо повышения ошибки 416 Range Not Satisfiable.
-
make_sequence() -
Преобразует итератор ответа в список. По умолчанию это происходит автоматически, если необходимо. Если
implicit_sequence_conversionотключено, этот метод не вызывается автоматически, и некоторые свойства могут вызывать исключения. Это также кодирует все элементы.Changelog
Добавлен в версии 0.6.
- Return type:
-
None
-
max_cookie_size = 4093 -
Выводит предупреждение, если заголовок cookie превышает этот размер. Значение по умолчанию, 4093, должно безопасно поддерживаться большинством браузеров. Cookie, больший этого размера, всё ещё будет отправлен, но некоторые браузеры могут игнорировать его или обработать его неправильно. Установите 0, чтобы отключить эту проверку.
Changelog
Добавлен в версии 0.13.
-
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] -
Поле заголовка ответа Retry-After может быть использовано с ответом 503 (Сервис недоступен) для указания того, как долго сервис, по ожиданиям, будет недоступен для клиента, сделавшего запрос.
Время в секундах до истечения срока действия или дата.
Changelog
Изменено в версии 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, но заголовок всё равно будет установлен.- Параметры:
-
- ключ (str) – ключ (имя) cookie, который нужно установить.
- значение (str) – значение cookie.
-
max_age (Optional[Union[timedelta, int]]) – количество секунд, или
None(по умолчанию), если cookie должно действовать только пока открыт браузер клиента. -
expires (Optional[Union[str, datetime, int, float]]) – объект
datetimeили метка времени Unix. - path (Optional[str]) – ограничивает cookie заданным путем, по умолчанию cookie распространяется на весь домен.
-
domain (Optional[str]) – для установки cookie для другого домена. Например,
domain=".example.com"установит cookie, доступный для доменаwww.example.com,foo.example.comи т. д. В противном случае cookie будет доступен только для домена, который его установил. -
secure (bool) – Если
True, cookie будет доступен только через HTTPS. - httponly (bool) – Запрещает JavaScript-доступ к cookie.
- samesite (Optional[str]) – Ограничивает область действия cookie, чтобы она применялась только к запросам с одного сайта.
- Тип возвращаемого значения:
-
None
-
set_data(value) -
Устанавливает новую строку как ответ. Значение должно быть строкой или байтами. Если установлена строка, она кодируется в кодировку charset ответа (utf-8 по умолчанию).
Журнал изменений
Новая версия 0.9.
-
set_etag(etag, weak=False) -
Устанавливает etag и перезаписывает предыдущее значение, если оно было.
-
property status: str -
Код HTTP-статуса в виде строки.
-
property status_code: int -
Код HTTP-статуса в виде числа.
-
property stream: ResponseStream -
Итерируемый ответ как потоковый объект для записи.
-
property vary: HeaderSet -
Значение поля Vary указывает набор полей заголовков запроса, которые полностью определяют, пока ответ является свежим, может ли кэшировать использовать ответ для ответа на последующий запрос без повторной проверки.
-
property www_authenticate: WWWAuthenticate -
Заголовок
WWW-Authenticateв обработанном виде.
-
© 2007–2022 Pallets
Licensed under the BSD 3-clause License.
https://werkzeug.palletsprojects.com/en/2.2.x/wrappers/