Объекты запроса/ответа
Объекты запроса и ответа оборачивают среду 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 environ генерируется сервером WSGI и содержит информацию о конфигурации сервера и запросе клиента.
-
populate_request (bool) – Добавить этот объект запроса в WSGI environ как
environ['werkzeug.request']. Может быть полезно при отладке. -
shallow (bool) – Делает чтение из
stream(и любого метода, который будет читать из него) вызываетRuntimeError. Полезно для предотвращения обработки данных формы в программном обеспечении-посреднике, что сделало бы их недоступными для конечного приложения.
Изменено в версии 3.0: Параметры
charset,url_charset, иencoding_errorsбыли удалены.Изменения
Изменено в версии 2.1: Старые
BaseRequestи классы-миксины были удалены.Изменено в версии 2.1: Атрибут
disable_data_descriptorудален.Изменено в версии 2.0: Объединение
BaseRequestи миксинов в один классRequest.Изменено в версии 0.5: Режим только для чтения применяется с помощью неизменяемых классов для всех данных.
-
_get_file_stream(total_content_length, content_type, filename=None, content_length=None) -
Вызывается для получения потока для загрузки файла.
Это должно предоставить похожий на файл класс с методами
read(),readline()иseek(), который является как записываемым, так и читаемым.По умолчанию реализация возвращает временный файл, если общая длина содержимого больше 500 КБ. Поскольку многие браузеры не предоставляют длину содержимого для файлов, важна только общая длина содержимого.
- Параметры:
-
- total_content_length (int | None) – общая длина содержимого всех данных в запросе вместе. Это значение гарантированно присутствует.
- content_type (str | None) – тип MIME загружаемого файла.
-
filename (str | None) – имя файла загружаемого файла. Может быть
None. - content_length (int | None) – длина этого файла. Это значение обычно не предоставляется, потому что веб-браузеры не предоставляют это значение.
- Тип возвращаемого значения:
-
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-исключения автоматически перехватываются и преобразуются в ответы вместо сбоя.
- Параметры:
-
f (t.Callable[[Запрос], WSGIApplication]) – вызываемый WSGI для декорирования
- Возвращает:
-
новый вызываемый WSGI
- Тип возвращаемого значения:
-
WSGIApplication
-
property args: MultiDict[str, str] -
Обработанные параметры URL (часть в URL после вопросительного знака).
По умолчанию эта функция возвращает
ImmutableMultiDict. Это можно изменить, установивparameter_storage_classна другой тип. Это может потребоваться, если порядок данных формы важен.Изменения
Изменено в версии 2.3: Некорректные байты остаются в процентированном кодировании.
-
property authorization: Authorization | None -
Заголовок
Authorization, разобранный в объектAuthorization.Noneесли заголовок отсутствует.Изменения
Изменено в версии 2.3:
Authorizationбольше не являетсяdict. Атрибутtokenбыл добавлен для схем аутентификации, которые используют токен вместо параметров.
-
property base_url: str -
Как
url, но без строки запроса.
-
property cache_control: RequestCacheControl -
Объект
RequestCacheControlдля входящих заголовков управления кэшем.
-
close() -
Закрывает связанные ресурсы этого объекта запроса. Это закрывает все файловые дескрипторы явно. Вы также можете использовать объект запроса в операторе with, что автоматически закроет его.
Изменения
Добавлена в версии 0.9.
- Тип возвращаемого значения:
-
None
-
content_encoding -
Поле заголовка сущности Content-Encoding используется в качестве модификатора типа медиа. При наличии значение поля указывает, какие дополнительные кодировки содержимого были применены к телу сущности, а следовательно, какие механизмы декодирования необходимо применить для получения типа медиа, указанного в поле заголовка Content-Type.
Изменения
Введено в версии 0.9.
-
property content_length: int | None -
Поле заголовка сущности Content-Length указывает размер тела сущности в байтах или, в случае метода HEAD, размер тела сущности, который был бы отправлен, если бы запрос был GET.
-
content_md5 -
Поле заголовка сущности Content-MD5, как определено в RFC 1864, представляет собой MD5-хеш тела сущности с целью обеспечения проверки целостности сообщения (MIC) тела сущности от начала до конца. (Примечание: MIC подходит для обнаружения случайных изменений тела сущности во время передачи, но не является доказательством защиты от злонамеренных атак.)
Изменения
Введено в версии 0.9.
-
content_type -
Поле заголовка сущности Content-Type указывает тип медиа тела сущности, отправленного получателю, или, в случае метода HEAD, тип медиа, который был бы отправлен, если бы запрос был GET.
-
property cookies: ImmutableMultiDict[str, str] -
dictсо всем содержимым cookie, переданных с запросом.
-
property data: bytes -
Необработанные данные, считанные из
stream. Будет пустым, если запрос представляет данные формы.Для получения необработанных данных, даже если они представляют данные формы, используйте
get_data().
-
date -
Поле общего заголовка Date представляет собой дату и время, в которые было отправлено сообщение, имея те же семантики, что и orig-date в RFC 822.
Изменения
Изменено в версии 2.0: Объект datetime учитывает часовой пояс.
-
dict_storage_class -
Псевдоним
ImmutableMultiDict
-
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.Изменения
Изменено в версии 0.9: До Werkzeug 0.9 это содержало только данные формы для запросов POST и PUT.
-
form_data_parser_class -
Псевдоним
FormDataParser
-
classmethod from_values(*args, **kwargs) -
Создает новый объект запроса на основе предоставленных значений. Если environ задан, недостающие значения заполняются оттуда. Этот метод полезен для небольших скриптов, когда вам нужно смоделировать запрос из URL. Не используйте этот метод для тестирования модулей, есть полнофункциональный клиентский объект (
Client), который позволяет создавать multipart-запросы, поддерживает cookie и т. д.Принимает те же опции, что и
EnvironBuilder.Изменения
Изменено в версии 0.5: Этот метод теперь принимает те же аргументы, что и
EnvironBuilder. Из-за этого параметрenvironтеперь называетсяenviron_overrides.
-
property full_path: str -
Запрашиваемый путь, включая строку запроса.
-
-
get_data(cache: bool = True, as_text: Literal[False] = False, parse_form_data: bool = False) → bytes - get_data(cache:bool=True, as_text:Literal[True]=False, parse_form_data:bool=False) str
-
Это считывает буферизованные входные данные от клиента в один байтовый объект. По умолчанию данные кэшируются, но это поведение можно изменить, установив
cacheвFalse.Обычно не рекомендуется вызывать этот метод, не проверив сначала длину содержимого, так как клиент может отправить десятки мегабайтов или более, что может вызвать проблемы с памятью на сервере.
Обратите внимание, что если данные формы уже были обработаны, этот метод ничего не вернёт, так как обработка данных формы не кэширует данные таким образом. Чтобы неявно вызвать функцию обработки данных формы, установите
parse_form_dataвTrue. В этом случае возвращаемое значение этого метода будет пустой строкой, если обработчик формы обрабатывает данные. Обычно это не нужно, так как если все данные кэшируются (что является значением по умолчанию), обработчик формы будет использовать кэшированные данные для обработки данных формы. Пожалуйста, всегда проверяйте длину содержимого перед вызовом этого метода, чтобы избежать исчерпания памяти сервера.Если
as_textустановлено вTrue, возвращаемое значение будет декодированной строкой.Changelog
Добавлена в версии 0.9.
-
get_json(force: bool = False, silent: Literal[False] = False, cache: bool = True) → Any - get_json(force:bool=False, silent:bool=False, cache:bool=True) Any|None
-
Парсинг
dataкак JSON.Если тип MIME не указывает JSON (application/json, см.
is_json), или парсинг не удаётся, вызываетсяon_json_loading_failed(), и его возвращаемое значение используется как возвращаемое значение. По умолчанию это вызывает ошибку 415 Неподдерживаемый тип медиа.- Параметры:
-
- force – Игнорировать тип MIME и всегда пытаться разобрать JSON.
-
silent – Скрыть ошибки типа MIME и парсинга, и вернуть
Noneвместо этого. - cache – Сохранить разобранный JSON для последующих вызовов.
Changelog
Изменено в версии 2.3: Вызывать ошибку 415 вместо 400.
Изменено в версии 2.1: Вызывать ошибку 400, если тип содержимого неверен.
-
headers -
Заголовки, полученные с запросом.
-
property host: str -
Имя хоста, к которому был выполнен запрос, включая порт, если он нестандартный. Проверяется с помощью
trusted_hosts.
-
property host_url: str -
Схема URL запроса и только хост.
-
property if_match: ETags -
Объект, содержащий все теги в заголовке
If-Match.- Тип возвращаемого значения:
-
property if_modified_since: datetime | None -
Разобранный заголовок
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: datetime | None -
Разобранный заголовок
If-Unmodified-Sinceв виде объекта datetime.Changelog
Изменено в версии 2.0: Объект datetime является часовозначимым.
-
input_stream -
Необработанный поток входных данных WSGI без каких-либо проверок безопасности.
Использование опасно. Он не защищает от бесконечных потоков или чтения после
content_lengthилиmax_content_length.Используйте
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: Any | None -
Обработанные данные JSON, если
mimetypeуказывает на JSON (application/json, см.is_json).Вызывает
get_json()со значениями по умолчанию.Если тип содержимого запроса не
application/json, будет вызвано исключение 415 Unsupported Media Type.Изменения
Изменено в версии 2.3: Вызывается исключение 415 вместо 400.
Изменено в версии 2.1: Вызывается исключение 400, если тип содержимого неверный.
-
json_module = <module 'json' from '/home/docs/.asdf/installs/python/3.10.12/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: int | None = None -
Максимальная длина содержимого. Передаётся в функцию парсинга данных формы (
parse_form_data()). Если установлено и при обращении к атрибутуformилиfilesпарсинг завершается неудачно из-за превышения указанного значения, генерируется исключениеRequestEntityTooLarge.Изменения
Добавлен в версии 0.5.
-
max_form_memory_size: int | None = None -
Максимальный размер поля формы. Передаётся в функцию парсинга данных формы (
parse_form_data()). Если установлено и при обращении к атрибутуformилиfilesобъём данных в памяти для данных POST превышает указанное значение, генерируется исключениеRequestEntityTooLarge.Изменения
Добавлен в версии 0.5.
-
max_form_parts = 1000 -
Максимальное количество частей multipart для парсинга, передаваемое в
form_data_parser_class. Если при парсинге данных формы частей больше, чем это значение, вызываетсяRequestEntityTooLarge.Изменения
Добавлен в версии 2.2.3.
-
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 (ValueError | None) – Если парсинг завершился неудачно, это исключение. Оно будет
Noneесли тип содержимого неapplication/json. - Тип возвращаемого значения:
Изменения
Изменено в версии 2.3: Вызывается исключение 415 вместо 400.
-
origin -
Хост, откуда исходит запрос. Установите
access_control_allow_originв ответе, чтобы указать разрешенные источники.
-
parameter_storage_class -
Псевдоним для
ImmutableMultiDict
-
path -
Часть пути URL после
root_path. Это путь, используемый для маршрутизации внутри приложения.
-
property pragma: HeaderSet -
Поле заголовка общего назначения Pragma используется для включения директив, специфичных для реализации, которые могут применяться к любому получателю вдоль цепочки запрос/ответ. Все директивы Pragma указывают необязательное поведение с точки зрения протокола; однако некоторые системы МОГУТ потребовать, чтобы это поведение было согласовано с директивами.
-
query_string -
Часть URL после символа “?”. Это значение в сыром виде, используйте
argsдля обработанных значений.
-
property range: Range | None -
Обработанный заголовок
Range.Изменения
Добавлен в версии 0.7.
- Тип возвращаемого значения:
-
referrer -
Поле заголовка запроса Referer позволяет клиенту указать для удобства сервера адрес (URI) ресурса, из которого был получен запрос URI (хотя поле заголовка написано неверно).
-
remote_addr -
Адрес клиента, отправившего запрос.
-
-
remote_user -
Если сервер поддерживает аутентификацию пользователя, и скрипт защищён, это атрибут содержит имя пользователя, под которым пользователь прошёл аутентификацию.
-
root_path -
Префикс, под которым установлено приложение, без заключительного слэша.
pathследует за этим.
-
property root_url: str -
Схема, хост и корневой путь URL запроса. Это корень, из которого приложение доступно.
-
scheme -
Схема URL протокола, используемого запросом, например
httpsилиwss.
-
property script_root: str -
Псевдоним для
self.root_path.environ["SCRIPT_ROOT"]без заключительного слэша.
-
server -
Адрес сервера.
(host, port),(path, None)для сокетов Unix илиNoneесли неизвестно.
-
shallow: bool -
Устанавливается при создании объекта запроса. Если
True, чтение из тела запроса вызоветRuntimeException. Полезно для предотвращения изменения потока из среды.
-
property stream: IO[bytes] -
Поток ввода WSGI с проверками безопасности. Этот поток может быть использован только один раз.
Используйте
get_data()для получения полных данных в виде байтов или текста. Атрибутdataбудет содержать полные байты только если они не представляют данные формы. Атрибутformбудет содержать обработанные данные формы в этом случае.В отличие от
input_stream, этот поток защищает от бесконечных потоков или чтения сверхcontent_lengthилиmax_content_length.Если
max_content_lengthустановлено, оно может быть применено к потокам, еслиwsgi.input_terminatedустановлено. В противном случае возвращается пустой поток.Если предел достигнут до того, как основной поток будет исчерпан (например, файл слишком большой или бесконечный поток), оставшиеся содержимое потока нельзя безопасно прочитать. В зависимости от того, как сервер обрабатывает это, клиенты могут показать ошибку «соединение прервано» вместо отображения ответа 413.
Changelog
Изменено в версии 2.3: Проверка
max_content_lengthвыполняется предварительно и во время чтения.Изменено в версии 0.9: Поток всегда установлен (но может быть использован), даже если доступ к парсингу формы был осуществлён первым.
-
trusted_hosts: list[str] | None = None -
Допустимые имена хостов при обработке запросов. По умолчанию все хосты доверяются, что означает, что принимается любой указанный клиентом хост.
Поскольку заголовки
HostиX-Forwarded-Hostмогут быть установлены клиентом злоумышленником на любое значение, рекомендуется установить этот параметр или реализовать аналогичную проверку в прокси-сервере (если приложение работает за ним).Changelog
Добавлена в версии 0.9.
-
property url: str -
Полный URL запроса со схемой, хостом, корневым путём, путём и строкой запроса.
-
property url_root: str -
Псевдоним для
root_url. URL со схемой, хостом и корневым путём. Например,https://example.com/app/.
-
property user_agent: UserAgent -
Имя пользователя. Используйте
user_agent.stringдля получения значения заголовка. Установитеuser_agent_classна подклассUserAgent, чтобы обеспечить парсинг других свойств или других расширенных данных.Changelog
Изменено в версии 2.1: Встроенный парсер был удалён. Установите
user_agent_classна подклассUserAgentдля разбора данных из строки.
-
user_agent_class -
Псевдоним для
UserAgent
-
property values: 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 (Iterable[str] | Iterable[bytes]) – Данные для тела ответа. Строка или байты, или кортеж или список строк или байтов для ответа фиксированной длины, или любой другой итерируемый объект строк или байтов для потокового ответа. По умолчанию пустое тело.
-
status (int | str | HTTPStatus | None) – Код статуса ответа. Либо целое число, в этом случае добавляется стандартное сообщение о статусе, либо строка в формате
{code} {message}, например,404 Not Found. По умолчанию 200. -
headers (Headers) – Объект
Headers, или список кортежей(key, value), которые будут преобразованы в объектHeaders. -
mimetype (str | None) – Тип MIME (тип контента без набора символов или других параметров) ответа. Если значение начинается с
text/(или соответствует другим специальным случаям), набор символов будет добавлен для созданияcontent_type. -
content_type (str | None) – Полный тип контента ответа. Переопределяет построение значения из
mimetype. -
direct_passthrough (bool) – Передать тело ответа напрямую как WSGI-итерируемый объект. Это можно использовать, когда тело — это двоичный файл или другой итератор байтов, чтобы пропустить некоторые ненужные проверки. Используйте
send_file()вместо ручного задания этого параметра.
Изменения
Изменено в версии 2.1: Старые
BaseResponseи миксины были удалены.Изменено в версии 2.0: Объединить
BaseResponseи миксины в один классResponse.Изменено в версии 0.5: Добавлен параметр
direct_passthrough.-
__call__(environ, start_response) -
Обработка этого ответа как WSGI-приложения.
- Параметры:
-
- environ (WSGIEnvironment) – WSGI-окружение.
- start_response (StartResponse) – вызываемый объект ответа, предоставленный WSGI-сервером.
- Возвращает:
-
итератор приложения
- Тип возвращаемого значения:
-
t.Iterable[bytes]
-
_ensure_sequence(mutable=False) -
Этот метод может вызываться методами, которым требуется последовательность. Если
mutableистинно, он также гарантирует, что последовательность ответа является стандартным списком 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 перечисляет набор методов, поддерживаемых ресурсом, идентифицируемым Request-URI. Цель этого поля — сообщить получателю о допустимых методах, связанных с ресурсом. Заголовок Allow ДОЛЖЕН присутствовать в ответе 405 (Метод не разрешен).
-
autocorrect_location_header = False -
Если заголовок перенаправления
Location— это относительный URL, преобразуйте его в абсолютный URL, включая схему и домен.Изменения
Изменено в версии 2.1: По умолчанию отключено, поэтому ответы будут отправлять относительные перенаправления.
Добавлен в версии 0.8.
-
automatically_set_content_length = True -
Должен ли этот объект ответа автоматически устанавливать заголовок content-length, если это возможно? По умолчанию это значение истинно.
Изменения
Добавлен в версии 0.8.
-
property cache_control: ResponseCacheControl -
Поле заголовка Cache-Control используется для указания директив, которые ОБЯЗАТЕЛЬНО должны выполняться всеми механизмами кеширования вдоль цепочки запроса/ответа.
-
calculate_content_length() -
Возвращает длину содержимого, если она доступна, или
Noneв противном случае.- Тип возвращаемого значения:
-
int | None
-
call_on_close(func) -
Добавляет функцию в внутренний список функций, которые должны быть вызваны в рамках закрытия ответа. Начиная с версии 0.7, эта функция также возвращает переданную функцию, чтобы это можно было использовать в качестве декоратора.
Изменения
Новая в версии 0.6.
-
close() -
Закрыть обернутый ответ, если это возможно. Вы также можете использовать объект в операторе with, что автоматически закроет его.
Изменения
Новая в версии 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. Доступен даже если заголовок не задан.Изменения
Новая в версии 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: bytes | str -
Дескриптор, который вызывает
get_data()иset_data().
-
date -
Поле заголовка Date представляет собой дату и время, в которые было отправлено сообщение, имея такие же семантические значения, как orig-date в RFC 822.
Изменения
Изменено в версии 2.0: Объект datetime имеет часовой пояс.
-
default_mimetype: str | None = 'text/plain' -
стандартный тип MIME, если он не указан.
-
default_status = 200 -
стандартный статус, если он не указан.
-
delete_cookie(key, path='/', domain=None, secure=False, httponly=False, samesite=None) -
Удалить cookie. Безмолвно завершает работу, если ключ не существует.
- Параметры:
-
- key (str) – ключ (имя) cookie, который нужно удалить.
- path (str | None) – если cookie, который нужно удалить, был ограничен путем, путь необходимо определить здесь.
- domain (str | None) – если cookie, который нужно удалить, был ограничен доменом, этот домен необходимо определить здесь.
-
secure (bool) – Если
True, cookie будет доступен только через HTTPS. - httponly (bool) – Запретить JavaScript-доступ к cookie.
- samesite (str | None) – Ограничить область действия 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всегда добавляется.Изменено в версии 0.6: Устанавливается заголовок
Content-Length.- Тип возвращаемого значения:
-
None
- Буферизует ответ в список, игнорируя
-
classmethod from_app(app, environ, buffered=False) -
Создаёт новый объект ответа на основе вывода приложения. Лучше всего подходит для приложений, которые всегда возвращают генератор.
Иногда приложения могут использовать вызываемую функцию
write(), возвращаемую функциейstart_response. Этот метод автоматически пытается решить такие частные случаи. Но если вы не получаете ожидаемый вывод, следует установитьbufferedвTrue, что принудительно включает буферизацию.
-
get_app_iter(environ) -
Возвращает итератор приложения для данного environ. В зависимости от метода запроса и текущего кода состояния возвращаемое значение может быть пустым ответом вместо ответа от приложения.
Если метод запроса —
HEAD, или код состояния находится в диапазоне, где спецификация HTTP требует пустого ответа, возвращается пустая итерируемая последовательность.Журнал изменений
Введено в версии 0.6.
- Параметры:
-
environ (WSGIEnvironment) – WSGI-окружение запроса.
- Возвращает:
-
итерируемый объект ответа.
- Тип возвращаемого значения:
-
t.Iterable[bytes]
-
get_data(as_text: Literal[False] = False) → bytes - get_data(as_text:Literal[True]) str
-
Строковое представление тела ответа. Каждый вызов этого метода кодирует и преобразует итерируемый объект ответа. Это может привести к нежелательному поведению при обработке больших данных.
Это поведение можно отключить, установив
implicit_sequence_conversionвFalse.Если
as_textустановлено вTrue, возвращаемое значение будет декодированной строкой.Журнал изменений
Введено в версии 0.9.
-
get_etag() -
Возвращает кортеж в формате
(etag, is_weak). Если ETag отсутствует, возвращается(None, None).
-
get_json(force: bool = False, silent: Literal[False] = False) → Any - get_json(force:bool=False, silent:bool=False) Any|None
-
Парсит
dataкак JSON. Полезно при тестировании.Если MIME-тип не указывает JSON (application/json, см.
is_json), возвращаетсяNone.В отличие от
Request.get_json(), результат не кешируется.- Параметры:
-
- force – Игнорировать MIME-тип и всегда пытаться распарсить JSON.
-
silent – Заглушить ошибки парсинга и вернуть
Noneвместо результата.
-
-
get_wsgi_headers(environ) -
Этот метод автоматически вызывается непосредственно перед началом ответа и возвращает заголовки, изменённые для данного окружения. Он возвращает копию заголовков ответа с внесёнными изменениями, если необходимо.
Например, заголовок местоположения (если присутствует) объединяется с корневым URL-адресом среды. Также длина содержимого автоматически устанавливается в ноль для определённых кодов состояния.
Изменения
Изменено в версии 0.6: Ранее эта функция называлась
fix_headersи изменяла объект ответа на месте. Также начиная с версии 0.6, IRIs в заголовках местоположения и местоположения содержимого обрабатываются корректно.Также начиная с версии 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. Объект ответа будет считать итератор буферизованным, если атрибут response является списком или кортежем.Изменения
Добавлена в версии 0.6.
-
property is_streamed: bool -
Если ответ передаётся по потокам (ответ не является итерируемым объектом с информацией о длине), это свойство равно
True. В этом случае передача по потокам означает, что нет информации о количестве итераций. Это обычноTrue, если в объект ответа передаётся генератор.Это полезно для проверки перед применением некоторого постфильтра, который не должен выполняться для потоковых ответов.
-
iter_encoded() -
Итерация по закодированному ответу с кодировкой ответа. Если объект ответа вызывается как WSGI-приложение, возвращаемое значение этого метода используется в качестве итератора приложения, если не активирован
direct_passthrough.
-
property json: Any | None -
Парсированные данные JSON, если
mimetypeуказывает на JSON (application/json, см.is_json).Вызывает
get_json()с аргументами по умолчанию.
-
json_module = <module 'json' from '/home/docs/.asdf/installs/python/3.10.12/lib/python3.10/json/__init__.py'> -
Модуль или другой объект, который имеет
dumpsиloadsфункции, соответствующие API встроенного модуляjson.
-
last_modified -
Поле Last-Modified entity-header указывает дату и время, когда исходный сервер считает, что вариативная версия была последний раз изменена.
Изменения
Изменено в версии 2.0: Объект datetime является осознающим часовой пояс.
-
location -
Поле Location response-header используется для перенаправления получателя в местоположение, отличное от Request-URI, для завершения запроса или идентификации нового ресурса.
-
-
make_conditional(request_or_environ, accept_ranges=False, complete_length=None) -
Условие ответа по запросу. Этот метод работает лучше всего, если для ответа уже определён etag. Метод
add_etagможно использовать для этого. Если вызов производится без etag, устанавливается только заголовок даты.Ничего не происходит, если метод запроса в запросе или окружении — не GET или HEAD.
Для оптимальной производительности при обработке запросов с диапазонами рекомендуется, чтобы ваш объект данных ответа реализовывал методы
seekable,seekиtellкак описано вio.IOBase. Объекты, возвращаемыеwrap_file(), автоматически реализуют эти методы.Он не удаляет тело ответа, поскольку функция
__call__()делает это автоматически.Возвращает self, так что вы можете сделать
return resp.make_conditional(req), но изменяет объект на месте.- Параметры:
-
- request_or_environ (WSGIEnvironment | Запрос) – объект запроса или WSGI-окружение, используемое для создания условного ответа.
-
accept_ranges (bool | строка) – Этот параметр определяет значение заголовка
Accept-Ranges. ЕслиFalse, заголовок не устанавливается. ЕслиTrue, он будет установлен на значение"bytes". Если это строка, используется это значение. -
complete_length (целое | None) – Используется только в корректных запросах с диапазоном. Установит значение полной длины
Content-Rangeи вычислит фактическое значениеContent-Length. Этот параметр обязателен для успешного завершения запросов с диапазонами.
- Исключения:
-
RequestedRangeNotSatisfiable, если заголовокRangeне может быть проанализирован или удовлетворён. - Тип возвращаемого значения:
Журнал изменений
Изменено в версии 2.0: Обработка диапазонов пропущена, если длина равна 0, вместо повышения ошибки 416 Range Not Satisfiable.
-
make_sequence() -
Преобразует итератор ответа в список. По умолчанию это происходит автоматически, если это необходимо. Если
implicit_sequence_conversionотключен, этот метод не вызывается автоматически, и некоторые свойства могут вызвать исключения. Это также кодирует все элементы.Журнал изменений
Добавлена в версии 0.6.
- Тип возвращаемого значения:
-
None
-
max_cookie_size = 4093 -
Выводить предупреждение, если размер заголовка cookie превышает этот размер. Значение по умолчанию 4093 должно быть безопасно поддерживаться большинством браузеров. Куки, размер которых больше этого значения, всё равно будут отправлены, но некоторые браузеры могут игнорировать их или обращаться с ними неправильно. Установите в 0, чтобы отключить эту проверку.
Журнал изменений
Добавлена в версии 0.13.
-
property mimetype: str | None -
MIME-тип (тип содержимого без кодировки и т. д.).
-
property mimetype_params: dict[str, str] -
Параметры MIME-типа в виде словаря. Например, если тип содержимого
text/html; charset=utf-8, параметры будут{'charset': 'utf-8'}.Журнал изменений
Добавлена в версии 0.5.
-
response: Iterable[str] | Iterable[bytes] -
Тело ответа для отправки как WSGI-итератор. Список строк или байтов представляет ответ фиксированной длины, любая другая итерируемая последовательность — это потоковый ответ. Строки кодируются в байты как UTF-8.
Не устанавливайте просто строку или байты, это сделает отправку ответа очень неэффективной, так как он будет итерировать по одному байту за раз.
-
property retry_after: datetime | None -
Поле заголовка ответа Retry-After может использоваться с ответом 503 (Сервис недоступен) для указания времени, в течение которого ожидается недоступность сервиса для клиента-запросителя.
Время в секундах до истечения срока действия или дата.
Журнал изменений
Изменено в версии 2.0: Объект datetime является часовым поясом.
-
set_cookie(key, value='', max_age=None, expires=None, path='/', domain=None, secure=False, httponly=False, samesite=None) -
Устанавливает cookie.
Выводится предупреждение, если размер заголовка cookie превышает
max_cookie_size, но заголовок всё равно будет установлен.- Параметры:
-
- key (строка) – ключ (имя) устанавливаемого cookie.
- value (строка) – значение cookie.
-
max_age (timedelta | целое | None) – должно быть числом секунд, или
None(по умолчанию), если cookie должно действовать только в течение сеанса браузера клиента. -
expires (строка | datetime | целое | число с плавающей точкой | None) – должен быть объектом
datetimeили меткой времени Unix. - path (строка | None) – ограничивает cookie заданным путём, по умолчанию он охватывает весь домен.
-
domain (строка | None) – если вы хотите установить cookie для другого домена. Например,
domain="example.com"установит cookie, который доступен для доменаwww.example.com,foo.example.comи т. д. В противном случае cookie будет доступен только для домена, который его установил. -
secure (булево) – Если
True, cookie будет доступен только через HTTPS. - httponly (булево) – Запрещает доступ к cookie через JavaScript.
- samesite (строка | None) – Ограничивает область действия cookie, чтобы он прикреплялся только к запросам, которые являются «одного сайта».
- Тип возвращаемого значения:
-
None
-
-
set_etag(etag, weak=False) -
Установить тег, а при необходимости переопределить старый.
-
property status: str -
Код HTTP-статуса в виде строки.
-
property status_code: int -
Код HTTP-статуса в виде числа.
-
property stream: ResponseStream -
Итерируемый объект ответа как поток только для записи.
-
property vary: HeaderSet -
Значение поля Vary указывает на набор полей заголовка запроса, полностью определяющих, пока ответ свеж, может ли кэш использовать ответ для ответа на последующий запрос без перепроверки.
-
property www_authenticate: WWWAuthenticate -
Поле заголовка
WWW-Authenticate, разобранное в объектWWWAuthenticate. Изменение объекта изменит значение заголовка.Этот заголовок по умолчанию не установлен. Для его установки присвойте экземпляр
WWWAuthenticateэтому атрибуту.response.www_authenticate = WWWAuthenticate( "basic", {"realm": "Authentication Required"} )Несколько значений для этого заголовка могут быть отправлены, чтобы предоставить клиенту несколько вариантов. Присвойте список для установки нескольких заголовков. Однако изменение элементов в списке не приведет к автоматическому обновлению значений заголовка, и обращение к этому атрибуту всегда будет возвращать только первое значение.
Чтобы удалить этот заголовок, присвойте
Noneили используйтеdel.Журнал изменений
Изменено в версии 2.3: Этому атрибуту можно присвоить значение для установки заголовка. Список можно присвоить для установки нескольких значений заголовка. Используйте
delдля удаления заголовка.Изменено в версии 2.3:
WWWAuthenticateбольше не являетсяdict. Атрибутtokenбыл добавлен для вызовов аутентификации, использующих токен вместо параметров.
-
© 2007 Pallets
Licensed under the BSD 3-clause License.
https://werkzeug.palletsprojects.com/en/3.0.x/wrappers/