Атрибут stream
Атрибут stream применяется к объекту запроса
request и возвращает поток входных данных.
Этот поток представляет собой файлоподобный объект,
из которого можно читать тело запроса по частям.
Атрибут полезен при обработке больших объёмов данных,
когда нет необходимости загружать всё тело запроса
в память целиком.
Атрибут не принимает параметров и доступен только для чтения. Поток возвращается в бинарном режиме, поэтому для получения текста его нужно декодировать.
Синтаксис
request.stream
Пример
Давайте прочитаем тело POST-запроса с помощью
атрибута stream и вернём его в ответе:
from flask import Flask, request
app = Flask(__name__)
@app.route('/data', methods=['POST'])
def data():
raw = request.stream.read()
return raw.decode('utf-8')
Результат выполнения кода для тела запроса
'abcde':
abcde
Пример
Давайте прочитаем поток по частям и посчитаем количество байт:
from flask import Flask, request
app = Flask(__name__)
@app.route('/stream', methods=['POST'])
def stream():
total = 0
while True:
chunk = request.stream.read(4)
if not chunk:
break
total += len(chunk)
return str(total)
Результат выполнения кода для тела запроса
'hello':
5
Смотрите также
-
класс
Request,
который представляет HTTP-запрос -
метод
get_data,
который возвращает тело запроса целиком -
метод
get_stream,
который возвращает поток с учётом кеша -
атрибут
data,
который содержит тело запроса в виде строки