Объекты запроса/ответа
Объекты запроса и ответа оборачивают среду 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("Hello %s!" % request.args.get('name', 'World!'))
return response(environ, start_response)
Поскольку это очень распространённая задача, объект Request предоставляет для этого вспомогательную функцию. Вышеприведенный код можно переписать следующим образом:
from werkzeug.wrappers import Request, Response
@Request.application
def application(request):
return Response("Hello %s!" % request.args.get('name', 'World!'))
application всё ещё является допустимым приложением WSGI, которое принимает среду и start_response вызываемый объект.
Изменяемость и повторное использование обёртки
Реализация объектов запроса и ответа Werkzeug пытается защитить вас от распространённых ошибок, запрещая определённые действия по возможности. Это служит двум целям: высокой производительности и избеганию ошибок.
Для объекта запроса применяются следующие правила:
- Объект запроса неизменяемый. Модификации по умолчанию не поддерживаются, однако вы можете заменить неизменяемые атрибуты изменяемыми, если вам нужно его изменить.
- Объект запроса может быть общим в одном потоке, но сам по себе не является потокобезопасным. Если вам нужно получить к нему доступ из нескольких потоков, используйте блокировки вокруг вызовов.
- Объект запроса невозможно сериализовать с помощью pickle.
Для объекта ответа применяются следующие правила:
- Объект ответа изменяемый
- Объект ответа можно сериализовать с помощью pickle или скопировать после вызова
freeze(). - Начиная с Werkzeug 0.6, безопасно использовать один и тот же объект ответа для нескольких ответов WSGI.
- Можно создавать копии, используя
copy.deepcopy.
Базовые обёртки
Эти объекты реализуют общий набор операций. Им не хватает функциональности расширенных функций, таких как анализ пользовательского агента или обработка etag. Эти функции доступны путём смешивания различных смежных классов или использования Request и Response.
-
class werkzeug.wrappers.BaseRequest(environ, populate_request=True, shallow=False) -
Очень базовый объект запроса. Он не реализует расширенных функций, таких как парсинг тега сущности или управление кешем. Объект запроса создаётся со средой WSGI в качестве первого аргумента и добавит себя в среду WSGI в качестве
'werkzeug.request', если он не создан сpopulate_requestустановленным в False.Доступно несколько миксинов, которые добавляют дополнительные функции объекту запроса, а также класс
Request, который наследуется отBaseRequestи содержит все важные миксины.Хорошей идеей является создание пользовательского подкласса
BaseRequestи добавление отсутствующих функций либо с помощью миксинов, либо с помощью прямой реализации. Вот пример таких подклассов:from werkzeug.wrappers import BaseRequest, ETagRequestMixin class Request(BaseRequest, ETagRequestMixin): passОбъекты запроса являются только для чтения. Начиная с версии 0.5, модификации запрещены во всех местах. В отличие от функций низкого уровня парсинга, объект запроса будет использовать неизменяемые объекты везде, где это возможно.
По умолчанию объект запроса предполагает, что все текстовые данные закодированы в формате
utf-8. Для получения дополнительной информации о настройке поведения см. главу о Unicode.По умолчанию объект запроса добавляется в среду WSGI в качестве
werkzeug.requestдля поддержки системы отладки. Если этого не требуется, установитеpopulate_requestвFalse.Если
shallowимеет значениеTrue, среда инициализируется как поверхностный объект вокруг environ. Любая операция, которая каким-либо образом изменяет environ (например, использование данных формы), вызывает исключение, если атрибутshallowне установлен явно вFalse. Это полезно для middleware, где вы не хотите случайно использовать данные формы. Поверхностный запрос не добавляется в среду WSGI.Изменено в версии 0.5: режим только для чтения был реализован с помощью классов неизменяемых данных для всех данных.
-
environ -
Среда WSGI, которую использует объект запроса для получения данных.
-
shallow -
Trueесли этот объект запроса является поверхностным (не изменяетenviron),Falseв противном случае.
-
_get_file_stream(total_content_length, content_type, filename=None, content_length=None) -
Вызывается для получения потока для загрузки файла.
Он должен предоставить похожий на файл класс с методами
read(),readline()иseek(), который одновременно записывает и считывает.По умолчанию, если общая длина содержимого больше 500 КБ, возвращается временный файл. Поскольку многие браузеры не предоставляют длину содержимого для файлов, важна только общая длина содержимого.
Параметры: - total_content_length – общая длина содержимого всех данных в запросе. Это значение гарантируется.
- content_type – тип MIME загружаемого файла.
-
filename – имя файла загружаемого файла. Может быть
None. - content_length – длина этого файла. Это значение обычно не предоставляется, потому что веб-браузеры его не предоставляют.
-
access_route -
Если существует заголовок перенаправления, это список всех IP-адресов от IP-адреса клиента до последнего сервера-прокси.
-
classmethod application(f) -
Декорирует функцию в качестве обработчика, принимающего запрос в качестве последнего аргумента. Это работает так же, как декортор
responder(), но функции передаётся объект запроса в качестве последнего аргумента, и объект запроса будет автоматически закрыт:@Request.application def my_wsgi_app(request): return Response('Hello World!')Начиная с Werkzeug 0.14, HTTP-исключения автоматически обрабатываются и преобразуются в ответы вместо возникновения ошибки.
Параметры: f – вызываемая WSGI-функция для декорирования Возвращает: новая вызываемая WSGI-функция
-
args -
Разбор параметров URL (часть URL после вопросительного знака).
По умолчанию эта функция возвращает
ImmutableMultiDict. Это можно изменить, установивparameter_storage_classна другой тип. Это может быть необходимо, если порядок данных формы важен.
-
base_url -
Как
url, но без строки запроса. См. также:trusted_hosts.
-
charset = 'utf-8' -
кодировка символов для запроса, по умолчанию utf-8
-
close() -
Закрывает связанные ресурсы этого объекта запроса. Это закрывает все дескрипторы файлов явно. Вы также можете использовать объект запроса в операторе with, который автоматически закроет его.
Добавлена в версии 0.9.
-
словарь с содержимым всех файлов cookie, переданных в запросе.
-
data -
Содержит входные данные запроса как строку в случае, если они пришли с типом MIME, который Werkzeug не обрабатывает.
-
dict_storage_class -
псевдоним для
werkzeug.datastructures.ImmutableTypeConversionDict
-
disable_data_descriptor = False -
Указывает, разрешено ли дескриптору данных чтение и буферизация входного потока. По умолчанию включено.
Добавлена в версии 0.9.
-
encoding_errors = 'replace' -
метод обработки ошибок, по умолчанию ‘replace’
-
files -
MultiDictсодержащий все загруженные файлы. Каждый ключ вfilesсоответствует имени из<input type="file" name="">. Каждое значение вfiles— объект WerkzeugFileStorage.В основном он ведёт себя как стандартный объект файла в Python, с той разницей, что у него также есть функция
save()для сохранения файла на файловой системе.Обратите внимание, что
filesбудет содержать данные только в том случае, если метод запроса был POST, PUT или PATCH, и<form>с которым выполнялся запрос, содержалenctype="multipart/form-data". В противном случае он будет пустым.Для получения более подробной информации о используемой структуре данных см. документацию
MultiDict/FileStorage.
-
form -
Параметры формы. По умолчанию эта функция возвращает
ImmutableMultiDict. Это можно изменить, установивparameter_storage_classна другой тип. Это может быть необходимо, если порядок данных формы важен.Обратите внимание, что загрузки файлов не попадают сюда, а вместо этого находятся в атрибуте
files.Изменено в версии 0.9: До версии Werkzeug 0.9 это содержало только данные формы для запросов POST и PUT.
-
form_data_parser_class -
псевдоним для
werkzeug.formparser.FormDataParser
-
-
classmethod from_values(*args, **kwargs) -
Создайте новый объект запроса на основе предоставленных значений. Если задан параметр environ, отсутствующие значения заполняются из него. Этот метод полезен для небольших скриптов, когда нужно смоделировать запрос из URL. Не используйте этот метод для тестирования, есть полноценный объект клиента (
Client), который позволяет создавать запросы multipart, поддерживает куки и т.д.Этот метод принимает те же параметры, что и
EnvironBuilder.Изменено в версии 0.5: Этот метод теперь принимает те же аргументы, что и
EnvironBuilder. Из-за этого параметрenvironтеперь называетсяenviron_overrides.Возвращает: объект запроса
-
full_path -
Запрашиваемый путь как строка Unicode, включая строку запроса.
-
get_data(cache=True, as_text=False, parse_form_data=False) -
Это считывает буферизованные входные данные клиента в одну строку байтов. По умолчанию это кэшируется, но это поведение можно изменить, установив
cacheвFalse.Обычно не рекомендуется вызывать этот метод без предварительной проверки длины содержимого, так как клиент может отправить десятки мегабайтов или более, что может вызвать проблемы с памятью на сервере.
Обратите внимание, что если данные формы уже обработаны, этот метод ничего не вернёт, так как обработка данных формы не кэширует данные так же, как этот метод. Чтобы неявно вызвать функцию обработки данных формы, установите
parse_form_dataвTrue. В этом случае значение, возвращаемое этим методом, будет пустой строкой, если анализатор формы обрабатывает данные. Обычно это не нужно, так как если все данные кэшируются (что является значением по умолчанию), анализатор формы будет использовать кэшированные данные для обработки данных формы. Всегда предварительно проверяйте длину содержимого перед вызовом этого метода, чтобы избежать исчерпания памяти сервера.Если
as_textустановлено вTrue, значение, возвращаемое функцией, будет декодированной строкой Unicode.Добавлено в версии 0.9.
-
headers -
Заголовки из WSGI environ в виде неизменяемого
EnvironHeaders.
-
host -
Просто хост, включая порт, если он доступен. См. также:
trusted_hosts.
-
host_url -
Просто хост со схемой как IRI. См. также:
trusted_hosts.
-
is_multiprocess -
булево значение, равное
True, если приложение обслуживается WSGI-сервером, который запускает несколько процессов.
-
is_multithread -
булево значение, равное
True, если приложение обслуживается многопоточным WSGI-сервером.
-
is_run_once -
булево значение, равное
True, если приложение будет выполнено только один раз за время жизни процесса. Это, например, происходит в случае CGI, но это не гарантирует, что выполнение произойдёт только один раз.
-
is_secure -
Trueесли запрос безопасный.
-
is_xhr -
Истина, если запрос был инициирован через JavaScript XMLHttpRequest. Это работает только с библиотеками, которые поддерживают заголовок
X-Requested-Withи устанавливают его в «XMLHttpRequest». К таким библиотекам относятся prototype, jQuery и Mochikit, а также, возможно, ещё какие-то.Устарело начиная с версии 0.13:
X-Requested-Withне является стандартным и ненадежным. Возможно, вы сможете использоватьAcceptMixin.accept_mimetypesвместо этого.
-
list_storage_class -
псевдоним
werkzeug.datastructures.ImmutableList
-
make_form_data_parser() -
Создаёт анализатор данных формы. Создаёт экземпляр
form_data_parser_classс некоторыми параметрами.Добавлено в версии 0.8.
-
max_content_length = None -
максимальная длина содержимого. Передаётся в функцию обработки данных формы (
parse_form_data()). Если установлено и доступ к атрибутуformилиfilesприводит к ошибке из-за переданного значения, превышающего указанное значение, выбрасывается исключениеRequestEntityTooLarge.Подробнее см. Обработка данных запроса.
Добавлено в версии 0.5.
-
max_form_memory_size = None -
максимальный размер поля формы. Передаётся в функцию обработки данных формы (
parse_form_data()). Если установлено и доступ к атрибутуformилиfilesприводит к ошибке из-за размера данных в памяти, превышающего указанное значение, выбрасывается исключениеRequestEntityTooLarge.Подробнее см. Обработка данных запроса.
Добавлено в версии 0.5.
-
method -
Метод запроса. (Например,
'GET'или'POST').
-
parameter_storage_class
-
path -
Запрашиваемый путь в виде строки Unicode. Поведение похоже на обычный путь в WSGI окружении, но всегда включает ведущий слэш, даже если доступен корень URL.
-
query_string -
Параметры URL в виде строки байтов.
-
remote_addr -
Удаленный адрес клиента.
-
remote_user -
Если сервер поддерживает аутентификацию пользователя и скрипт защищён, этот атрибут содержит имя пользователя, с которым пользователь прошёл аутентификацию.
-
scheme -
Схема URL (http или https).
Добавлено в версии 0.7.
-
script_root -
Путь корня скрипта без заключительного слэша.
-
stream -
Если входные данные формы не закодированы известным MIME типом, данные хранятся необработанными в этом потоке для использования. Большинство времени лучше использовать
data, который предоставит эти данные в виде строки. Поток возвращает данные только один раз.В отличие от
input_stream, этот поток надёжно защищён, чтобы вы не могли случайно прочитать данные за пределами длины входных данных. Werkzeug всегда обращается к этому потоку для чтения данных, что позволяет обернуть этот объект потоком, который выполняет фильтрацию.Изменено в версии 0.9: Этот поток всегда доступен, но может быть использован анализатором формы позже. Раньше поток устанавливался только если не произошло никакого анализа.
-
-
trusted_hosts = None -
Необязательный список доверенных хостов для данного запроса. По умолчанию все хосты доверяются, что означает принятие любого хоста, указанного клиентом.
Поскольку заголовки
HostиX-Forwarded-Hostмогут быть установлены клиентом злоумышленником на любое значение, рекомендуется либо установить это свойство, либо реализовать аналогичную валидацию в прокси-сервере (если приложение работает за ним).Добавлена в версии 0.9.
-
url -
Восстановленный текущий URL как IRI. См. также:
trusted_hosts.
-
url_charset -
Кодировка символов, используемая для URL. По умолчанию совпадает со значением
charset.Добавлена в версии 0.6.
-
url_root -
Полный URL корня (с именем хоста), это корень приложения как IRI. См. также:
trusted_hosts.
-
values -
werkzeug.datastructures.CombinedMultiDictобъединяетargsиform.
-
want_form_data_parsed -
Возвращает True, если метод запроса несет контент. Начиная с Werkzeug 0.9, это будет так, если передается тип контента.
Добавлена в версии 0.8.
-
-
class werkzeug.wrappers.BaseResponse(response=None, status=None, headers=None, mimetype=None, content_type=None, direct_passthrough=False) -
Базовый класс ответа. Самое важное свойство объекта ответа заключается в том, что он является обычным WSGI-приложением. Он инициализируется несколькими параметрами ответа (заголовки, тело, код состояния и т.д.) и запускает допустимый WSGI-ответ, когда вызывается с параметрами environ и start_response.
Поскольку это само по себе WSGI-приложение, обработка обычно завершается до фактической отправки ответа на сервер. Это помогает системам отладки, поскольку они могут перехватить все исключения до начала отправки ответов.
Вот небольшой пример WSGI-приложения, использующего объекты ответа:
from werkzeug.wrappers import BaseResponse as Response def index(): return Response('Index page') 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)Подобно
BaseRequest, объект которого лишен многих функций, реализованных в миксинах. Это дает вам больший контроль над фактическим API ваших объектов ответа, поэтому вы можете создавать подклассы и добавлять пользовательские функции. Полностью функциональный объект ответа доступен какResponse, который реализует несколько полезных миксинов.Чтобы принудительно использовать новый тип уже существующих ответов, вы можете использовать метод
force_type(). Это полезно, если вы работаете с разными подклассами объектов ответа и хотите обработать их с известным интерфейсом.По умолчанию объект ответа предполагает, что все текстовые данные закодированы в формате
utf-8. Более подробную информацию о настройке поведения см. в главе о Unicode.Ответ может быть любым итерируемым объектом или строкой. Если это строка, она рассматривается как итерируемый объект с одним элементом, который является переданной строкой. Заголовки могут быть списком кортежей или объектом
Headers.Особое примечание для
mimetypeиcontent_type: для большинства типов MIMEmimetypeиcontent_typeработают одинаково, различие затрагивает только типы MIME «текст». Если тип MIME, переданный сmimetype, является типом MIME, начинающимся сtext/, параметр charset объекта ответа добавляется к нему. В отличие от этого, параметрcontent_typeвсегда добавляется как заголовок без изменений.Изменено в версии 0.5: был добавлен параметр
direct_passthrough.Параметры: - response – строка или итерируемый объект ответа.
- status – строка со статусом или целое число с кодом состояния.
-
headers – список заголовков или объект
Headers. - mimetype – тип MIME ответа. См. примечание выше.
- content_type – тип содержимого для ответа. См. примечание выше.
-
direct_passthrough – если установлено в значение
True,iter_encoded()не вызывается перед итерацией, что позволяет передавать специальные итераторы без изменений (см.wrap_file()для получения дополнительной информации).
-
response -
Итератор приложения. Если создан из строки, он будет списком, в противном случае — объектом, переданным в качестве итератора приложения. (Первый аргумент, переданный в
BaseResponse)
-
headers -
Объект
Headers, представляющий заголовки ответа.
-
status_code -
Код состояния ответа в виде целого числа.
-
direct_passthrough -
Если
direct_passthrough=Trueбыл передан объекту ответа или если данному атрибуту было присвоено значениеTrueперед использованием объекта ответа в качестве WSGI-приложения, обернутый итератор возвращается без изменений. Это позволяет передавать специальныйwsgi.file_wrapperобъекту ответа. См.wrap_file()для получения дополнительной информации.
-
__call__(environ, start_response) -
Обработать этот ответ как WSGI-приложение.
Параметры: - environ – WSGI-среда.
- start_response – вызываемый объект ответа, предоставленный WSGI-сервером.
Возвращает: итератор приложения
-
_ensure_sequence(mutable=False) -
Этот метод может быть вызван методами, которым требуется последовательность. Если
mutableравно True, он также гарантирует, что последовательность ответа является стандартным списком Python.Добавлена в версии 0.6.
-
autocorrect_location_header = True -
Должен ли этот объект ответа исправлять заголовок расположения, чтобы он соответствовал RFC? По умолчанию это True.
Добавлена в версии 0.8.
-
automatically_set_content_length = True -
Должен ли этот объект ответа автоматически устанавливать заголовок content-length, если это возможно? По умолчанию это True.
Добавлена в версии 0.8.
-
calculate_content_length() -
Возвращает длину содержимого, если она доступна, или
Noneв противном случае.
-
call_on_close(func) -
Добавляет функцию в внутренний список функций, которые должны вызываться при закрытии ответа. С версии 0.7 эта функция также возвращает переданную функцию, чтобы это можно было использовать как декоратор.
Добавлена в версии 0.6.
-
charset = 'utf-8' -
кодировка символов ответа.
-
close() -
Закрыть обернутый ответ, если это возможно. Вы также можете использовать объект в операторе with, который автоматически закроет его.
Добавлена в версии 0.9: Теперь может использоваться в операторе with.
-
data -
Дескриптор, вызывающий
get_data()иset_data().
-
default_mimetype = 'text/plain' -
тип MIME по умолчанию, если он не предоставлен.
-
default_status = 200 -
код состояния по умолчанию, если он не предоставлен.
-
Удалить cookie. Не выдает ошибок, если ключ не существует.
Параметры: - key – ключ (имя) cookie для удаления.
- path – если cookie был ограничен путем, путь должен быть определен здесь.
- domain – если cookie был ограничен доменом, этот домен должен быть определен здесь.
-
classmethod force_type(response, environ=None) -
Принудительно установить, что WSGI-ответ является объектом ответа текущего типа. Werkzeug будет использовать
BaseResponseво многих ситуациях, таких как исключения. Если вы вызоветеget_response()на исключении, вы получите обычный объектBaseResponse, даже если вы используете пользовательский подкласс.Этот метод может принудительно установить определённый тип ответа, а также преобразовывать произвольные WSGI-вызовы в объекты ответа, если предоставлена среда:
# convert a Werkzeug response object into an instance of the # MyResponseClass subclass. response = MyResponseClass.force_type(response) # convert any WSGI application into a response object response = MyResponseClass.force_type(response, environ)
Это особенно полезно, если вы хотите обработать ответы в основном диспетчере и использовать функциональность, предоставляемую вашим подклассом.
Помните, что это может изменять объекты ответа на месте, если это возможно!
Параметры: - response – объект ответа или WSGI-приложение.
- environ – объект WSGI-среды.
Возвращает: объект ответа.
-
freeze() -
Вызовите этот метод, если хотите подготовить объект ответа к сериализации с помощью pickle. Это буферизует генератор, если он есть. Также будет установлен заголовок
Content-Lengthсо значением длины тела.Изменено в версии 0.6: Теперь устанавливается заголовок
Content-Length.
-
classmethod from_app(app, environ, buffered=False) -
Создайте новый объект ответа из выходных данных приложения. Лучше всего, если вы передадите ему приложение, которое постоянно возвращает генератор. Иногда приложения могут использовать вызываемый
write()метод, возвращаемый функциейstart_response. Это пытается автоматически решить такие крайние случаи. Но если вы не получите ожидаемые выходные данные, вы должны установитьbufferedвTrue, что обеспечивает буферизацию.Параметры: - app – WSGI-приложение для выполнения.
- environ – WSGI-среда для выполнения.
-
buffered – установите в
Trueдля принудительной буферизации.
Возвращает: объект ответа.
-
get_app_iter(environ) -
Возвращает итератор приложения для заданной среды. В зависимости от метода запроса и текущего кода состояния возвращаемое значение может быть пустым ответом, а не тем, что из ответа.
Если метод запроса
HEAD, или код состояния находится в диапазоне, где спецификация HTTP требует пустого ответа, возвращается пустая итерируемая последовательность.Добавлено в версии 0.6.
Параметры: environ – WSGI-среда запроса. Возвращает: итерируемая последовательность ответа.
-
get_data(as_text=False) -
Строковое представление тела запроса. При каждом вызове этого свойства итерируемая последовательность запроса кодируется и сплющивается. Это может привести к нежелательному поведению при обработке больших данных.
Это поведение можно отключить, установив
implicit_sequence_conversionвFalse.Если
as_textустановлено вTrue, возвращаемое значение будет декодированной строкой Юникод.Добавлено в версии 0.9.
-
get_wsgi_headers(environ) -
Это автоматически вызывается непосредственно перед началом ответа и возвращает заголовки, измененные для данной среды. Возвращает копию заголовков из ответа с некоторыми примененными модификациями, если необходимо.
Например, заголовок расположения (если он есть) объединяется с корневым URL среды. Также длина содержимого автоматически устанавливается в ноль для определенных кодов состояния.
Изменено в версии 0.6: Ранее эта функция называлась
fix_headersи изменяла объект ответа на месте. Кроме того, начиная с версии 0.6, Werkzeug корректно обрабатывает IRIs в заголовках расположения и расположения содержимого.Также начиная с версии 0.6, Werkzeug попытается установить длину содержимого, если сможет ее определить самостоятельно. Это происходит, если все строки в итерируемой последовательности ответа уже закодированы, и итерируемая последовательность буферизована.
Параметры: environ – WSGI-среда запроса. Возвращает: возвращает новый объект Headers.
-
get_wsgi_response(environ) -
Возвращает окончательный WSGI-ответ в виде кортежа. Первый элемент кортежа — итератор приложения, второй — код состояния, а третий — список заголовков. Возвращаемый ответ создается специально для данной среды. Например, если метод запроса в WSGI-среде
HEAD, ответ будет пустым, и будут присутствовать только заголовки и код состояния.Добавлено в версии 0.6.
Параметры: environ – WSGI-среда запроса. Возвращает: кортеж (app_iter, status, headers).
-
implicit_sequence_conversion = True -
если установлено в
False, обращение к свойствам объекта ответа не будет пытаться потреблять итератор ответа и преобразовывать его в список.Добавлено в версии 0.6.2: Это свойство ранее называлось
implicit_seqence_conversion. (Обратите внимание на опечатку). Если вы использовали эту функцию, вам нужно будет адаптировать свой код к изменению имени.
-
is_sequence -
Если итератор буферизован, это свойство будет
True. Объект ответа будет считать итератор буферизованным, если атрибут response является списком или кортежем.Добавлено в версии 0.6.
-
is_streamed -
Если ответ передаётся потоком (ответ не является итерируемой последовательностью с информацией о длине), это свойство равно
True. В этом случае потоковая передача означает, что нет информации о количестве итераций. Это обычноTrueесли генератор передается объекту ответа.Это полезно для проверки перед применением некоторого вида последующей фильтрации, которая не должна выполняться для потоковых ответов.
-
iter_encoded() -
Итерировать ответ, закодированный с кодировкой ответа. Если объект ответа вызывается как WSGI-приложение, возвращаемое значение этого метода используется как итератор приложения, если не был активирован
direct_passthrough.
-
make_sequence() -
Преобразует итератор ответа в список. По умолчанию это происходит автоматически, если это необходимо. Если
implicit_sequence_conversionотключен, этот метод не вызывается автоматически, и некоторые свойства могут вызывать исключения. Это также кодирует все элементы.Добавлено в версии 0.6.
-
Предупреждение, если заголовок cookie превышает этот размер. Значение по умолчанию 4093 должно безопасно поддерживаться большинством браузеров. Cookie, больший этого размера, все равно будет отправлен, но он может быть проигнорирован или обработан неправильно некоторыми браузерами. Установите в 0, чтобы отключить эту проверку.
Добавлено в версии 0.13.
-
Устанавливает cookie. Параметры такие же, как и в объекте cookie
Morselв стандартной библиотеке Python, но он также принимает данные Юникод.Предупреждение выдается, если размер заголовка cookie превышает
max_cookie_size, но заголовок все равно будет установлен.Параметры: - key – ключ (имя) устанавливаемого cookie.
- value – значение cookie.
-
max_age – должно быть числом секунд, или
None(по умолчанию), если cookie должен действовать только в течение сеанса браузера клиента. -
expires – должно быть объектом
datetimeили меткой времени Unix. - path – ограничивает cookie заданным путём, по умолчанию он охватывает весь домен.
-
domain – если вы хотите установить cookie для другого домена. Например,
domain=".example.com"установит cookie, который доступен для доменаwww.example.com,foo.example.comи т. д. В противном случае cookie будет доступен только для домена, который его установил. -
secure – Если
True, cookie будет доступен только через HTTPS - httponly – запрещает JavaScript получать доступ к cookie. Это расширение стандарта cookie и, вероятно, не поддерживается всеми браузерами.
- samesite – Ограничивает область действия cookie таким образом, что он будет прикреплен только к запросам, если эти запросы являются «однодоменными».
-
set_data(value) -
Устанавливает новую строку в качестве ответа. Устанавливаемое значение должно быть строкой Юникод или байтовой строкой. Если установлена строка Юникод, она автоматически кодируется в кодировку ответа (по умолчанию utf-8).
Добавлено в версии 0.9.
-
status -
Код состояния HTTP
-
status_code -
Код состояния HTTP как число
-
Классы-микшины
Werkzeug также предоставляет вспомогательные микшины для различных функций, связанных с HTTP, таких как etag, управление кешем, пользовательские агенты и т. д. При наследовании вы можете смешивать эти классы, чтобы расширить функциональность объекта BaseRequest или BaseResponse. Вот небольшой пример объекта запроса, который анализирует заголовки Accept:
from werkzeug.wrappers import AcceptMixin, BaseRequest
class Request(BaseRequest, AcceptMixin):
pass
Классы Request и Response наследуются от классов BaseRequest и BaseResponse и реализуют все миксины, предоставляемые Werkzeug:
-
class werkzeug.wrappers.Request(environ, populate_request=True, shallow=False) -
Полностью функциональный объект запроса, реализующий следующие миксины:
-
AcceptMixinдля парсинга заголовков accept -
ETagRequestMixinдля обработки заголовков etag и управления кэшем -
UserAgentMixinдля интроспекции пользовательского агента -
AuthorizationMixinдля обработки аутентификации HTTP -
CommonRequestDescriptorsMixinдля общих заголовков
-
-
class werkzeug.wrappers.Response(response=None, status=None, headers=None, mimetype=None, content_type=None, direct_passthrough=False) -
Полностью функциональный объект ответа, реализующий следующие миксины:
-
ETagResponseMixinдля обработки заголовков etag и управления кэшем -
ResponseStreamMixinдля добавления поддержки свойстваstream -
CommonResponseDescriptorsMixinдля различных описателей HTTP -
WWWAuthenticateMixinдля поддержки аутентификации HTTP
-
-
class werkzeug.wrappers.AcceptMixin -
Миксин для классов со свойством
environдля получения всех заголовков accept HTTP в качестве объектовAccept(или их подклассов).-
accept_charsets -
Список поддерживаемых набором символов, представленных в виде объекта
CharsetAccept.
-
accept_encodings -
Список поддерживаемых кодировок. Кодировки в HTTP — это кодировки сжатия, такие как gzip. Для наборов символов смотрите
accept_charset.
-
accept_languages -
Список поддерживаемых языков в виде объекта
LanguageAccept.
-
accept_mimetypes -
Список поддерживаемых MIME-типов в виде объекта
MIMEAccept.
-
-
class werkzeug.wrappers.AuthorizationMixin -
Добавляет свойство
authorization, которое представляет собой разобранное значение заголовкаAuthorizationв виде объектаAuthorization.-
Объект
Authorizationв разобранном виде.
-
-
class werkzeug.wrappers.ETagRequestMixin -
Добавляет описатели тега сущности и кэша к объекту запроса или объекту с доступной средой WSGI как
environ. Это предоставляет не только доступ к etag, но и к заголовку управления кэшем.-
cache_control -
Объект
RequestCacheControlдля заголовков управления кэшем.
-
if_match -
Объект, содержащий все etag в заголовке
If-Match.Тип возвращаемого значения: ETags
-
if_modified_since -
Разобранный заголовок
If-Modified-Sinceв виде объекта datetime.
-
if_none_match -
Объект, содержащий все etag в заголовке
If-None-Match.Тип возвращаемого значения: ETags
-
if_range -
Разобранный заголовок
If-Range.Добавлено в версии 0.7.
Тип возвращаемого значения: IfRange
-
if_unmodified_since -
Разобранный заголовок
If-Unmodified-Sinceв виде объекта datetime.
-
range -
Разобранный заголовок
Range.Добавлено в версии 0.7.
Тип возвращаемого значения: Range
-
-
class werkzeug.wrappers.ETagResponseMixin -
Добавляет дополнительную функциональность к объекту ответа для обработки etag и кеширования. Этот миксин требует объекта, имеющего по крайней мере объект
headers, реализующий интерфейс словаря, аналогичныйHeaders.Если вы хотите, чтобы метод
freeze()автоматически добавлял etag, вам необходимо добавить этот метод до базового класса ответа. Базовый класс ответа по умолчанию этого не делает.-
accept_ranges -
Заголовок
Accept-Ranges. Несмотря на то, что название предполагает поддержку нескольких значений, допускается только одно строковое значение.Общие значения
'bytes'и'none'.Новое в версии 0.7.
-
add_etag(overwrite=False, weak=False) -
Добавить etag для текущего ответа, если он ещё не задан.
-
cache_control -
Поле заголовка Cache-Control используется для указания директив, которые ДОЛЖНЫ соблюдаться всеми механизмами кэширования вдоль цепочки запроса/ответа.
-
content_range -
Заголовок
Content-Rangeв виде объектаContentRange. Даже если заголовок не установлен, он предоставит такой объект для более удобной обработки.Новое в версии 0.7.
-
freeze(no_etag=False) -
Вызовите этот метод, если вы хотите подготовить объект ответа к сериализации. Это буферизует генератор, если он есть. Это также устанавливает etag, если
no_etagне установлено вTrue.
-
get_etag() -
Возвращает кортеж в формате
(etag, is_weak). Если ETag отсутствует, возвращается значение(None, None).
-
make_conditional(request_or_environ, accept_ranges=False, complete_length=None) -
Делает ответ условным для запроса. Этот метод лучше всего работает, если для ответа уже определен etag. Для этого можно использовать метод
add_etag. Если вызов осуществляется без etag, устанавливается только заголовок даты.Не выполняет никаких действий, если метод запроса в объекте запроса или окружении WSGI отличается от GET или HEAD.
Для оптимальной производительности при обработке запросов на диапазон рекомендуется, чтобы объект данных вашего ответа реализовывал методы
seekable,seekиtell, как описано вio.IOBase. Объекты, возвращаемыеwrap_file(), автоматически реализуют эти методы.Не удаляет тело ответа, так как функция
__call__()автоматически выполняет эту операцию.Возвращает self, что позволяет выполнить
return resp.make_conditional(req), но изменяет объект на месте.Параметры: - request_or_environ – объект запроса или окружение WSGI, используемое для условного определения ответа.
-
accept_ranges – Этот параметр определяет значение заголовка
Accept-Ranges. ЕслиFalse(значение по умолчанию), заголовок не устанавливается. ЕслиTrue, он будет установлен в"bytes". ЕслиNone, он будет установлен в"none". Если это строка, используется это значение. -
complete_length – Будет использоваться только в корректных запросах на диапазон. Установит значение полной длины
Content-Rangeи рассчитает действительное значениеContent-Length. Этот параметр обязателен для успешного завершения запросов на диапазон.
Исключения: RequestedRangeNotSatisfiable, если заголовокRangeне удалось разобрать или удовлетворить.
-
set_etag(etag, weak=False) -
Установить etag и переопределить старое значение, если оно было.
-
-
class werkzeug.wrappers.ResponseStreamMixin -
Миксин для подклассов
BaseRequest. Классы, унаследованные от этого миксина, автоматически получат свойствоstream, предоставляющее интерфейс записи только для итерируемого объекта ответа.-
stream -
Итерируемый объект ответа в виде потока только для записи.
-
-
class werkzeug.wrappers.CommonRequestDescriptorsMixin -
Миксин для подклассов
BaseRequest. Объекты запроса, использующие этот миксин, автоматически получат дескрипторы для нескольких заголовков HTTP с автоматическим преобразованием типов.Новое в версии 0.5.
-
content_encoding -
Поле заголовка Content-Encoding используется в качестве модификатора типа носителя. При наличии его значение указывает, какие дополнительные кодировки контента были применены к телу сущности, и, следовательно, какие механизмы декодирования должны быть применены для получения типа носителя, указанного в поле заголовка Content-Type.
Новое в версии 0.9.
-
content_length -
Поле заголовка Content-Length указывает размер тела сущности в байтах или, в случае метода HEAD, размер тела сущности, который был бы отправлен, если бы запрос был GET.
-
content_md5 -
Поле заголовка Content-MD5, определенное в RFC 1864, представляет собой хэш MD5 тела сущности для проверки целостности сообщения (MIC) тела сущности от начала до конца. (Примечание: MIC подходит для обнаружения случайных изменений тела сущности во время передачи, но не является доказательством защиты от злонамеренных атак).
Новое в версии 0.9.
-
content_type -
Поле заголовка Content-Type указывает тип носителя тела сущности, отправляемого получателю, или, в случае метода HEAD, тип носителя, который был бы отправлен, если бы запрос был GET.
-
date -
Поле заголовка Date представляет собой дату и время создания сообщения, имеющее те же семантические значения, что и orig-date в RFC 822.
-
max_forwards -
Поле заголовка запроса Max-Forwards предоставляет механизм, с помощью которого методы TRACE и OPTIONS могут ограничить количество прокси-серверов или шлюзов, которые могут пересылать запрос следующему входящему серверу.
-
mimetype -
Аналогично
content_type, но без параметров (например, без кодировки символов, типа и т. д.) и всегда в нижнем регистре. Например, если тип контентаtext/HTML; charset=utf-8, mimetype будет'text/html'.
-
mimetype_params -
Параметры mimetype в виде словаря. Например, если тип контента
text/html; charset=utf-8, параметры будут{'charset': 'utf-8'}.
-
pragma -
Поле заголовка Pragma используется для включения директив, специфичных для реализации, которые могут применяться к любому получателю вдоль цепочки запроса/ответа. Все директивы pragma указывают на опциональное поведение с точки зрения протокола; однако, некоторые системы МОГУТ потребовать, чтобы это поведение соответствовало этим директивам.
-
referrer -
Поле заголовка запроса Referer позволяет клиенту указать, для удобства сервера, адрес (URI) ресурса, из которого был получен Request-URI (ссылки, хотя поле заголовка написано с ошибкой).
-
-
class werkzeug.wrappers.CommonResponseDescriptorsMixin -
Mixin для подклассов
BaseResponse. Объекты ответа, в которых смешан этот класс, автоматически получат описатели для нескольких HTTP-заголовков с автоматическим преобразованием типов.-
age -
Поле заголовка ответа Age показывает оценку отправителя времени, прошедшего с момента генерации ответа (или его перепроверки) на сервере происхождения.
Значения Age — это неотрицательные целые десятичные числа, представляющие время в секундах.
-
allow -
Поле сущностного заголовка Allow перечисляет набор методов, поддерживаемых ресурсом, идентифицированным Request-URI. Цель этого поля — сообщить получателю о допустимых методах, связанных с ресурсом. Поле заголовка Allow ОБЯЗАТЕЛЬНО должно быть присутствовать в ответе 405 (Method Not Allowed).
-
content_encoding -
Поле сущностного заголовка Content-Encoding используется в качестве модификатора для типа носителя. При его наличии его значение указывает, какие дополнительные кодировки содержимого были применены к телу сущности, а также какие механизмы декодирования необходимо применить для получения типа носителя, на который ссылается поле заголовка Content-Type.
-
content_language -
Поле сущностного заголовка Content-Language описывает естественный язык (языки) целевой аудитории для вложенной сущности. Обратите внимание, что это может не совпадать со всеми языками, используемыми в теле сущности.
-
content_length -
Поле сущностного заголовка Content-Length указывает размер тела сущности в десятичном числе октетов, отправленных получателю, или, в случае метода HEAD, размер тела сущности, который был бы отправлен, если бы запрос был GET.
-
content_location -
Поле сущностного заголовка Content-Location МОЖЕТ использоваться для предоставления расположения ресурса для сущности, вложенной в сообщение, когда эта сущность доступна по адресу, отличного от URI запрошенного ресурса.
-
content_md5 -
Поле сущностного заголовка Content-MD5, как определено в RFC 1864, представляет собой хэш-сумму MD5 тела сущности для проверки целостности сообщения от начала до конца (MIC) тела сущности. (Примечание: MIC подходит для обнаружения случайных изменений тела сущности во время передачи, но не является доказательством против злонамеренных атак.)
-
content_type -
Поле сущностного заголовка Content-Type указывает тип носителя тела сущности, отправленного получателю, или, в случае метода HEAD, тип носителя, который был бы отправлен, если бы запрос был GET.
-
date -
Поле общего заголовка Date представляет дату и время, в которые было создано сообщение, имея такие же семантические значения, как и orig-date в RFC 822.
-
expires -
Поле сущностного заголовка Expires указывает дату/время, после которого ответ считается устаревшим. Устаревшая запись кэша обычно не возвращается кэшем.
-
last_modified -
Поле сущностного заголовка Last-Modified указывает дату и время, по которым сервер происхождения считает, что вариант был в последний раз изменен.
-
location -
Поле заголовка ответа Location используется для перенаправления получателя в расположение, отличное от Request-URI, для завершения запроса или идентификации нового ресурса.
-
mimetype -
Тип mime без charset и т.д.
-
mimetype_params -
Параметры типа mime в виде словаря. Например, если тип содержимого —
text/html; charset=utf-8, то параметры будут{'charset': 'utf-8'}.Добавлен в версии 0.5.
-
retry_after -
Поле заголовка ответа Retry-After может использоваться с ответом 503 (Service Unavailable) для указания, как долго сервис ожидается недоступным для клиента, отправляющего запрос.
Время в секундах до истечения срока действия или дата.
-
vary -
Значение поля Vary указывает набор полей заголовка запроса, которые полностью определяют, в то время как ответ свеж, разрешается ли кэшу использовать ответ для ответа на последующий запрос без перепроверки.
-
-
class werkzeug.wrappers.WWWAuthenticateMixin -
Добавляет свойство
www_authenticateк объекту ответа.-
www_authenticate -
Заголовок
WWW-Authenticateв обработанном виде.
-
-
class werkzeug.wrappers.UserAgentMixin -
Добавляет атрибут
user_agentк объекту запроса, который содержит обработанный пользовательский агент браузера, который инициировал запрос в виде объектаUserAgent.-
user_agent -
Текущий пользовательский агент.
-
Дополнительные классы-микшины
Эти микшины не включены в стандартные классы Request и Response. Они обеспечивают дополнительное поведение, которое необходимо включить, создав свои собственные подклассы:
class Response(JSONMixin, BaseResponse):
pass
JSON
-
class werkzeug.wrappers.json.JSONMixin -
Mixin для обработки
dataкак JSON. Может быть включен для классовRequestиResponse.Если установлен модуль simplejson, он будет предпочтительнее встроенного модуля Python
json.-
get_json(force=False, silent=False, cache=True) -
Обработать
dataкак JSON.Если тип носителя не указывает JSON (application/json, см.
is_json()), это возвращаетNone.Если обработка завершилась ошибкой, вызывается
on_json_loading_failed(), и его возвращаемое значение используется как возвращаемое значение.Параметры: - force — Игнорировать тип носителя и всегда пытаться обработать JSON.
-
silent — Заглушить ошибки обработки и вернуть
Noneвместо этого. - cache — Сохранить обработанный JSON для последующих вызовов.
-
is_json -
Проверка, указывает ли тип носителя данные JSON, либо application/json, либо application/*+json.
-
json -
Обработанные данные JSON, если
mimetypeуказывает JSON (application/json, см.is_json()).Вызывает
get_json()с аргументами по умолчанию.
-
json_module -
Модуль или другой объект, содержащий функции
dumpsиloads, которые соответствуют API встроенного модуляjson.Псевдоним
_JSONModule
-
on_json_loading_failed(e) -
Вызывается, если при обработке
get_json()произошла ошибка и она не заглушена. Если этот метод возвращает значение, оно используется в качестве возвращаемого значения дляget_json(). Стандартная реализация вызывает исключениеBadRequest.
-
© 2007–2020 Pallets
Licensed under the BSD 3-clause License.
https://werkzeug.palletsprojects.com/en/0.16.x/wrappers/