Сообщить об ошибке.

Класс Request() модуля flask в Python

Объект запроса приложения Flask

Синтаксис:

import flask

flask.Request(environ, populate_request=True, shallow=False)

Параметры:

  • environ - среда, созданная сервером WSGI и содержит информацию о конфигурации сервера и запросе клиента.
  • populate_request=True - добавляет 'werkzeug.request' в среду WSGI (environ['werkzeug.request']). Полезно при отладке.
  • shallow=False - заставляет вызвать RuntimeError при чтение из потока (и любого метода, который будет читать из него). Полезно для предотвращения использования данных формы в промежуточном программном обеспечении, которое сделало бы его недоступным для конечного приложения.

Возвращаемое значение:

  • объект запроса Request.

Описание:

Класс Request() модуля flask создает объект запроса при каждом обращении к URL приложения, который, в свою очередь, запоминает совпадающую конечную точку endpoint и аргументы, передаваемые в функцию-представление.

Класс flask.Request является подклассом werkzeug.wrappers.Request и предоставляет все атрибуты, определенные Werkzeug, плюс несколько специфичных для Flask.

Для доступа к данным входящих запросов необходимо использовать глобальный объект запроса flask.request. Этот объект Flask анализирует данные входящих запросов и предоставляет доступ к ним. Фреймворк Flask гарантирует, что при нахождении в многопоточной среде, для активного потока, всегда поступают правильные данные.

Объект запроса Request приложения Flask.

Объект запроса Request - это то, что заканчивается запросом к сайту по определенному URL-адресу. Если необходимо заменить объект запроса, используемый по умолчанию, то можно создать его подкласс и установить app.request_class для созданного подкласса.

Внимание!!! Объект запроса Request, в приложении Flask доступен в качестве глобального прокси-объекта flask.request. Например:

# импортируем прокси-объект `flask.request`
from flask import request

@app.route('/login', methods=['POST', 'GET'])
def login():
    error = None
    # `request.method`: доступ к HTTP-методу
    if request.method == 'POST':
        # `request.form`: доступ к полям, 
        # передаваемым в HTML-форме.
        if valid_login(request.form.get('username'),
                       request.form.get('password')):
            # если условие if выполнилось успешно, то 'username' 
            # существует и дальше к нему можно обращаться как  
            # к ключу словаря, что на много быстрее.
            return log_the_user_in(request.form['username'])
        else:
            error = 'Неверное имя пользователя или пароль'
    return render_template('login.html', error=error)

Дополнительно смотрите материал "Извлечение различных данных из запроса в приложении на Flask".

Атрибуты и методы объекта Request.


Request.accept_charsets:

Свойство Request.accept_charsets представляет собой подкласс списка для списков кортежей наборов символов (value, quality), которые этот клиент поддерживает. Представлен в качестве объекта werkzeug.datastructures.CharsetAccept.

Подкласс списка автоматически сортируется по специфике и качеству quality.

>>> a = CharsetAccept([('ISO-8859-1', 1), ('utf-8', 0.7)])
>>> a.best
# 'ISO-8859-1'
>>> 'iso-8859-1' in a
# True
>>> 'UTF8' in a
# True
>>> 'utf7' in a
# False
>>> a['utf-8']
# 0.7
>>> a['utf7']
# 0
# преобразует в строку HTTP-заголовка.
a.to_header()

Request.accept_encodings:

Свойство Request.accept_encodings представляет собой подкласс списка для списков кортежей кодировок (value, quality), которые принимает этот клиент. Кодировки в термине HTTP - это кодировки сжатия, такие как gzip.

Свойство Request.accept_encodings ведет себя как Request.accept_charsets

Request.accept_languages:

Свойство Request.accept_languages представляет собой подкласс списка для списков кортежей языков, которые этот клиент принимает в качестве объекта werkzeug.datastructures.LanguageAccept.

Свойство Request.accept_languages ведет себя как Request.accept_charsets

Request.accept_mimetypes:

Свойство Request.accept_mimetypes представляет собой подкласс списка для списков кортежей типов mimetypes, поддерживаемых этим клиентом в качестве объекта werkzeug.datastructures.MIMEAccept.

Свойство Request.accept_mimetypes ведет себя как Request.accept_charsets

Request.access_control_request_headers:

Атрибут Request.access_control_request_headers отправляет запрос предварительной проверки, для выяснения, какие заголовки будут отправлены с запросом перекрестного происхождения.

Чтобы указать, какие заголовки разрешены необходимо установить в ответ Response.access_control_allow_headers.

Request.access_control_request_method:

Атрибут Request.access_control_request_method отправляет запрос предварительной проверки, для выяснения, какой метод будет использоваться для запроса перекрестного происхождения.

Чтобы указать, какие методы разрешены необходимо установить в ответ Response.access_control_allow_methods.

Request.access_route:

Свойство Request.access_route представляет собой список всех ip-адресов от ip-адреса клиента до последнего прокси-сервера, если существует заголовок 'FORWARDED'.

Request.application(f):

Метод класса Request.application() используется как декоратор для функции WSGI, которая принимает запрос в качестве последнего аргумента. Это работает как декоратор responder(), но функция передает объект запроса в качестве последнего аргумента, и объект запроса будет автоматически закрыт:

@Request.application
def my_wsgi_app(request):
    return Response('Hello World!')

Возвращает WSGIApplication. Начиная с Werkzeug 0.14 Исключения HTTP автоматически перехватываются и преобразуются в ответы вместо сбоя.

Request.args:

Свойство Request.args возвращает неизменяемый словарь с параметрами проанализированного URL-адреса (часть в URL - адресе после знака вопроса).

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

Возвращаемый словарь ImmutableMultiDict имеет метод .get(), который отличается от dict.get() одним принимаемым аргументом. Вызвать этот метод можно следующим образом:

request.args.get(key, default=None, type=None)

Подробнее в материале "Извлечение различных данных из запроса в приложении на Flask".

Request.authorization:

Свойство Request.authorization представляет заголовок авторизации, отправленный клиентом, в виде объекта werkzeug.datastructures.Authorization в распарсенном виде.

Request.base_url:

Свойство Request.base_url ведет себя как Request.url, но без строки запроса.

Request.blueprint:

Свойство Request.blueprint возвращает зарегистрированное имя текущей схемы blueprint.

Request.blueprint не возвратит значение, если конечная точка не является частью схемы blueprint, или если сопоставление URL-адресов не удалось или еще не было выполнено.

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

Request.blueprints:

Свойство Request.blueprints возвращает зарегистрированные имена текущей схемы blueprint вверх к родительским схемам.

Это будет пустой список [], если нет текущей схемы или если не удалось сопоставить URL-адрес.

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

Request.cache_control:

Свойство Request.cache_control представляет объект werkzeug.datastructures.RequestCacheControl, является неизменяемым и предоставляет доступ ко всем заголовкам управления кэшем, относящимся к запросу.

Для получения строкового представления заголовка запроса Cache-Control, нужно преобразовать объект RequestCacheControl в строку функцией str() или вызвать метод RequestCacheControl.to_header(). Если необходимо его подклассировать и добавить свои собственные элементы, то смотрите исходный код для этого класса.

Request.close():

Метод Request.close() закрывает связанные ресурсы этого объекта запроса. Метод явно закрывает все дескрипторы файлов.

Также можно использовать объект запроса в инструкции with, которая автоматически закроет его.

Request.content_encoding:

Атрибут Request.content_encoding представляет собой поле заголовка Content-Encoding, используется как модификатор типа медиа.

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

Request.content_length:

Свойство Request.content_length представляет собой поле заголовка Content-Length, указывает размер тела объекта в байтах или, в случае метода HEAD, размер тела объекта, которое было бы отправлено, если бы использовался запрос GET.

Request.content_md5:

Атрибут Request.content_md5 данные поля заголовка Content-MD5, как определено в RFC 1864, представляет собой дайджест MD5 тела объекта с целью обеспечения сквозной проверки целостности сообщения (MIC) тела объекта.

Примечание: MIC хорош для обнаружения случайной модификации тела объекта при передаче, но не является защитой от злонамеренных атак.

Request.content_type:

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

Request.cookies:

Свойство Request.cookies представляет собой словарь с содержанием всех файлов cookie, переданных вместе с запросом.

Request.data: bytes:

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

Request.date:

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

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

Request.dict_storage_class:

Атрибут Request.dict_storage_class ссылка на werkzeug.datastructures.ImmutableMultiDict.

Request.endpoint:

Свойство Request.endpoint представляет собой конечную точку, соответствующую URL-адресу запроса.

Это свойство будет возвращать None, если сопоставление URL-адреса не удалось или еще не было выполнено.

Request.endpoint в сочетании с Request.view_args может использоваться для восстановления того же URL-адреса или измененного URL-адреса.

Request.environ:

Атрибут Request.environ возвращает словарь переменных среды WSGI сервера, которые содержат HTTP-заголовки и информацию с сервера WSGI.

Подробнее в материале "Извлечение различных данных из запроса в приложении на Flask".

Request.files:

Свойство Request.files возвращает объект MultiDict, содержащий все загруженные файлы. Каждый ключ в Request.files - это имя name из <input type="file" name="">, а каждое значение, является объектом FileStorage модуля Werkzeug.

Он ведет себя как стандартный файловый объект, с той лишь разницей, что он также имеет метод .save(), которая может сохранять файл в файловой системе.

Обратите внимание, что файлы будут содержать данные только в том случае, если метод запроса был POST, PUT или PATCH, а HTML-форма, отправленная в запросе, имела тип enctype="multipart/form-data", в противном случае Request.files будет пустым.

Подробнее в материале "Загрузка файлов на сервер в приложении Flask".

Request.form:

Свойство Request.form возвращает данные полей переданной HTML-формы в виде атрибутов. По умолчанию это свойство возвращает ImmutableMultiDict.

Возвращаемый тип можно изменить, задав для параметра Request.parameter_storage_class другой тип. Изменение типа может быть необходимо, если важен порядок возвращаемых данных в форме.

Подробнее в материале "Извлечение различных данных из запроса в приложении на Flask".

Имейте в виду, что данные загрузки файлов возвращаются не здесь, а в атрибуте Request.files.

Request.form_data_parser_class:

Атрибут Request.form_data_parser_class представляет собой ссылку на werkzeug.formparser.FormDataParser.

Request.from_values(*args, **kwargs):

Метод класса Request.from_values() создает новый объект запроса Request на основе предоставленных значений. Если задана среда environ, то пропущенные значения заполняются оттуда.

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

Метод класса Request.from_values() принимает те же параметры, что и werkzeug.test.EnvironBuilder.

Request.full_path:

Свойство Request.full_path представляет собой запрошенный URL путь, включая строку запроса..

Request.get_data(cache=True, as_text=False, parse_form_data=False):

Метод Request.get_data() считывает буферизованные входящие данные от клиента в однобайтовый объект. По умолчанию, входящие данные кэшируется, но это поведение можно изменить, установив для аргумента cache значение False.

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

Обратите внимание, что если данные формы уже были проанализированы, то этот метод ничего не вернет, так как синтаксический анализ данных формы не кэшируется, как этот метод. Чтобы неявно вызывать функцию синтаксического анализа данных формы, необходимо установить у аргумента parse_form_data значение True. Когда это будет сделано и если синтаксический анализатор формы обрабатывает данные, то возвращаемое значение этого метода будет пустой строкой. Как правило, в этом нет необходимости, поскольку если все данные кэшируются (по умолчанию), синтаксический анализатор формы будет использовать кэшированные данные для анализа данных формы. В любом случае, прежде чем вызывать этот метод, всегда помните о проверке длины содержимого, чтобы избежать падения приложения из за нехватки памяти сервера.

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

Request.get_json(force=False, silent=False, cache=True):

Метод Request.get_json() возвращает распарсенные/разобранные данные JSON.

Если тип mimetype не указывает на JSON (application/json, смотрите Request.is_json()), то этот метод возвращает значение None.

Если синтаксический анализ завершается неудачно, то вызывается Request.on_json_loading_failed(), и его значение используется в качестве возвращаемого значения.

Принимаемые аргументы:

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

Request.headers:

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

Request.host:

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

Request.host_url:

Свойство Request.host_url возвращает только схему URL-адреса и хост.

Request.if_match:

Свойство Request.if_match возвращает объект werkzeug.datastructures.ETags, содержащий все теги в заголовке If-Match. Свойство можно использовать для проверки наличия одного etag в коллекции etag.

Request.if_modified_since:

Свойство Request.if_modified_since возвращает распарсенный заголовок If-Modified-Since как объект datetime.datetime.

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

Request.if_none_match:

Свойство Request.if_none_match возвращает объект werkzeug.datastructures.ETags, содержащий все теги в заголовке If-None-Match.

Request.if_range:

Свойство Request.if_range возвращает распарсенный/разобранный заголовок If-Range как объект werkzeug.datastructures.IfRange. У него либо не будет ни метки, ни даты, либо будет присутствовать одно из них, но никогда не будет присутствовать и то, и другое вместе.

Имеет атрибуты IfRange.date, IfRange.etag и метод строкового представления заголовка IfRange.to_header().

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

Request.if_unmodified_since:

Свойство Request.if_unmodified_since возвращает распарсенный заголовок If-Unmodified-Since как объект datetime.datetime.

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

Request.input_stream:

Атрибут Request.input_stream возвращает входной поток WSGI.

Использовать атрибут Request.input_stream - плохая идея, т.к. при чтении можно легко выйти за границы. Вместо этого используйте Request.stream.

Request.is_json:

Свойство Request.is_json проверяет, что тип mimetype указывает на данные JSON: application/json или `application/*+json.

Request.is_multiprocess:

Атрибут Request.is_multiprocess логическое значение, которое верно, если приложение обслуживается WSGI сервером, если он порождает несколько процессов.

Request.is_multithread:

Атрибут Request.is_multithread логическое значение, которое верно, если приложение обслуживается многопоточным WSGI сервером.

Request.is_run_once:

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

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

Request.is_secure: bool:

Свойство Request.is_secure возвращает True, если запрос был сделан с использованием защищенного протокола (HTTPS или WSS).

Request.json:

Свойство Request.json возвращает проанализированные данные JSON, если mimetype указывает на JSON (application/json, смотрите Request.is_json).

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

Request.list_storage_class:

Атрибут Request.list_storage_class представляет собой ссылку на werkzeug.datastructures.ImmutableList.

Request.make_form_data_parser():

Метод Request.make_form_data_parser() создает анализатор данных HTML-формы в виде экземпляра класса Request.form_data_parser_class с некоторыми параметрами.

Возвращает тип werkzeug.formparser.FormDataParser.

Request.max_content_length:

Свойство Request.max_content_length доступно только для чтения, представляет доступ к параметру конфигурации MAX_CONTENT_LENGTH.

Request.max_forwards:

Атрибут Request.max_forwards возвращает поле заголовка запроса Max-Forwards, который предоставляет механизм с методами TRACE и OPTIONS для ограничения количества прокси или шлюзов, которые могут пересылать запрос на следующий входящий сервер.

Request.method:

Атрибут Request.method возвращает HTTP-метод, с помощью которого был сделан запрос, например GET.

Request.mimetype:

Свойство Request.mimetype ведет себя как Request.content_type, но без параметров (например, без кодировки, типа и т.д.) и всегда возвращает значение в нижнем регистре.

Например, если тип содержимого text/HTML; charset=utf-8, то Request.mimetype будет 'текст/html'.

Request.mimetype_params:

Свойство Request.mimetype_params возвращает параметры mimetype как словарь dict.

Например, если тип содержимого text/HTML; charset=utf-8, то Request.mimetype_params возвратит: {'charset': 'utf-8'}.

Request.on_json_loading_failed(e):

Метод Request.on_json_loading_failed() вызывается, если синтаксический анализ Request.get_json() завершается неудачно и не отключается. Если этот метод возвращает значение, которое используется как возвращаемое значение для .get_json().

Реализация по умолчанию вызывает BadRequest.

Request.origin:

Атрибут Request.origin возвращает хост, с которого исходил запрос.

Для указания разрешенных источников запроса необходимо установить в ответ сервера Response.access_control_allow_origin разрешенные источники.

Request.parameter_storage_class:

Атрибут Request.parameter_storage_class представляет собой ссылку на werkzeug.datastructures.ImmutableMultiDict.

Request.path:

Атрибут Request.path возвращает часть пути URL-адреса после Request.root_path. Это путь, используемый для маршрутизации в приложении.

Request.pragma:

Свойство Request.pragma это данные поля общего заголовка Pragma, используется для включения директив, зависящих от реализации, которые могут применяться к любому получателю в цепочке запрос/ответ. Все директивы pragma определяют необязательное поведение с точки зрения протокола; однако некоторые системы МОГУТ требовать, чтобы поведение соответствовало директивам.

Возвращает тип werkzeug.datastructures.HeaderSet. Ведет себя подобно множеству set Python:

>>> resp.pragma(['foo', 'bar'])
# добавит значение заголовка
>>> resp.pragma.add('baz'])
>>> resp.pragma
# HeaderSet(['foo', 'bar', 'baz'])

# удалит значение заголовка
>>> resp.pragma.discard('foo')
# преобразует в строку HTTP-заголовка.
>>> resp.pragma.to_header()
# очистит заголовок.
>>> resp.pragma.clear()

Request.query_string:

Атрибут Request.query_string возвращает часть URL-адреса после знака вопроса '?'. Это исходная строка параметров запроса, используйте Request.args для извлечения проанализированных значений.

Request.range:

Свойство Request.range возвращает проанализированное значение заголовка Range в виде объекта werkzeug.datastructures.Range. Все методы поддерживают только bytes в качестве единицы измерения. Сохраняет список диапазонов, если он задан, но методы работают только в том случае, если указан только один диапазон.

Request.referrer:

Атрибут Request.referrer возвращает данные поля заголовка запроса Referer[sic], позволяет клиенту указать адрес (URI) ресурса, из которого был получен запрос ('referrer', хотя поле заголовка написано с ошибкой).

Request.remote_addr:

Атрибут Request.remote_addr возвращает ip-адрес клиента, отправляющего запрос.

Request.remote_user:

Атрибут Request.remote_user содержит имя пользователя, под которым пользователь прошел аутентификацию, если сервер поддерживает аутентификацию пользователя и сценарий защищен.

Request.root_path:

Атрибут Request.root_path возвращает префикс, под которым монтируется приложение, без завершающей косой черты. после этого значения начинается Request.path.

Request.root_url:

Свойство Request.root_url возвращает схему URL-адреса, хост и корневой путь. Это корень, из которого осуществляется доступ к приложению.

Request.routing_exception:

Атрибут Request.routing_exception возвращает исключение, которое будет вызвано или было вызвано как часть обработки запроса, если сопоставление URL-адреса не удалось. Обычно это исключение NotFound или что-то подобное.

Request.scheme:

Атрибут Request.scheme возвращает протокол URL-адреса, используемого запросом, например https или wss.

Request.script_root:

Свойство Request.script_root представляет собой псевдоним для self.root_path. Environment ['SCRIPT_ROOT'] без косой черты в конце.

Request.server:

Атрибут Request.server возвращает адрес сервера. Для unix-сокетов (host, port), (path, None) или None, если неизвестно.

Request.shallow:

Атрибут Request.shallow устанавливается при создании объекта запроса. Если True, то чтение из тела запроса вызовет исключение RuntimeException. Полезно для предотвращения изменения потока промежуточным программным обеспечением.

Request.stream:

Если входящие данные формы не были закодированы с использованием известного типа mime, то данные сохраняются в потоке Request.stream без изменений и имеет тип байтовой строки bytes. В большинстве случаев лучше использовать данные в виде строки Request.data.

Поток Request.stream возвращает данные только один раз.

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

Request.url:

Свойство Request.url возвращает полный URL-адрес запроса со схемой, хостом, корневым путем, путем и строкой запроса.

Подробнее в материале "Извлечение различных данных из запроса в приложении на Flask".

Request.url_charset:

Свойство Request.url_charset возвращает кодировку, используемую для URL-адресов.

Request.url_root:

Свойство Request.url_root представляет собой ссылку на Request.root_url, URL-адрес со схемой, хостом и корневым путем. Например, https://example.com/app/.

Request.url_rule:

Атрибут Request.url_rule возвращает правило внутреннего URL-адреса, соответствующее запросу.

Атрибут может быть полезен для проверки того, какие методы разрешены для URL-адреса из обработчика до/после (request.url_rule.methods) и т. д. Хотя, если HTTP-метод запроса был недопустимым для правила URL-адреса, то действительный список доступен в routing_exception.valid_methods (атрибут исключения Werkzeug MethodNotAllowed), потому что запрос никогда не был внутренне привязан.

Request.user_agent:

Свойство Request.user_agent возвращает объект с информацией о пользовательском агенте. Чтобы получить значение заголовка необходимо использовать Request.user_agent.string.

Чтобы обеспечить синтаксический анализ свойств пользовательского агента, нужно создать подкласс werkzeug.user_agent.UserAgent, который будет анализировать строку Request.user_agent.string и установить его в Request.user_agent_class.

Изменено в версии 2.0: встроенный синтаксический анализатор устарел и будет удален в Werkzeug 2.1. Подкласс UserAgent должен быть настроен на анализ данных из строки Request.user_agent.string.

Request.user_agent_class:

Атрибут Request.user_agent_class представляет собой ссылку на werkzeug.useragents._UserAgent.

Request.values:

Свойство Request.values возвращает словарь, который сочетает/объединяет в себе данные Request.args и Request.form.

Для GET-запросов в Request.values присутствуют только данные из Request.args.

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

Request.view_args:

Атрибут Request.view_args словарь аргументов функции-представления, соответствующих запросу. Если при сопоставлении произошло исключение, то возвращаемое значение будет None.

Request.want_form_data_parsed: bool:

Свойство Request.want_form_data_parsed возвращает True, если метод запроса имеет контент.

Если отправляется заголовок Content-Type, то по умолчанию возвращается True.