Атрибут content_length
Атрибут content_length применяется к объекту запроса
request и возвращает длину тела HTTP-запроса
в байтах. Значение берётся из заголовка
Content-Length. Если заголовок отсутствует,
атрибут возвращает None.
Атрибут особенно полезен при обработке POST-запросов, когда нужно заранее узнать размер отправленных данных, например, перед чтением потока или валидацией загрузки.
Синтаксис
request.content_length
Пример
Давайте выведем длину тела POST-запроса в ответе:
from flask import Flask, request
app = Flask(__name__)
@app.route('/submit', methods=['POST'])
def submit():
return f"Length: {request.content_length}"
Результат выполнения кода при отправке тела 'hello':
Length: 5
Пример
Давайте проверим, что атрибут возвращает None
для GET-запроса без тела:
from flask import Flask, request
app = Flask(__name__)
@app.route('/info')
def info():
if request.content_length is None:
return "no body"
return str(request.content_length)
Результат выполнения кода для GET-запроса:
"no body"
Пример
Давайте используем атрибут для ограничения размера загружаемых данных:
from flask import Flask, request
app = Flask(__name__)
@app.route('/upload', methods=['POST'])
def upload():
length = request.content_length
if length is not None and length > 100:
return "too large", 413
return f"accepted: {length} bytes"
Результат выполнения кода для тела размером 50 байт:
accepted: 50 bytes
Смотрите также
-
класс
Request,
который представляет HTTP-запрос -
атрибут
max_content_length,
который задаёт максимальный размер тела запроса -
атрибут
content_type,
который возвращает MIME-тип тела запроса -
метод
get_data,
который читает тело запроса как байты