Spec-Zone.ru › Werkzeug 0.16

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

Объекты запроса и ответа оборачивают среду 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 пытается защитить вас от распространённых ошибок, запрещая определённые действия по возможности. Это служит двум целям: высокой производительности и избеганию ошибок.

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

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

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

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

cookies

словарь с содержимым всех файлов 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 — объект Werkzeug FileStorage.

В основном он ведёт себя как стандартный объект файла в 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

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

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: для большинства типов MIME mimetype и 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

код состояния по умолчанию, если он не предоставлен.

delete_cookie(key, path='/', domain=None)

Удалить 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.

max_cookie_size = 4093

Предупреждение, если заголовок cookie превышает этот размер. Значение по умолчанию 4093 должно безопасно поддерживаться большинством браузеров. Cookie, больший этого размера, все равно будет отправлен, но он может быть проигнорирован или обработан неправильно некоторыми браузерами. Установите в 0, чтобы отключить эту проверку.

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

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

Устанавливает 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

Объект 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
END_OF_DOCUMENT_MARKER
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/

Spec-Zone.ru

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