Атрибут body
Атрибут body класса HttpRequest возвращает тело запроса в виде байтовой строки (bytes). Он предназначен для доступа к сырым данным, переданным в запросе, например, при обработке JSON-данных, загрузке файлов или работе с веб-хуками. В отличие от атрибутов HttpRequest/attribute/GET/">GET и HttpRequest/attribute/POST/">POST, которые предоставляют обработанные данные форм, body позволяет получить исходные данные без какой-либо интерпретации.
Атрибут доступен только для чтения. Он может быть пустым (b''), если тело запроса отсутствует. Для обработки данных из body часто требуется дополнительное декодирование, например, в формат UTF-8 при работе с текстовыми данными.
Синтаксис
request.body
Пример
Рассмотрим базовый пример получения сырых данных из тела запроса в представлении:
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def raw_data_view(request):
raw_body = request.body
return HttpResponse(f"Raw body: {raw_body}")
Пример
Часто бывает необходимо декодировать байтовые данные в строку для дальнейшей обработки. Например, при получении JSON:
import json
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def json_view(request):
try:
data = json.loads(request.body.decode('utf-8'))
return JsonResponse({'status': 'ok', 'data': data})
except json.JSONDecodeError:
return JsonResponse({'status': 'error'}, status=400)
Результат выполнения при корректном JSON-запросе:
{"status": "ok", "data": {"key": "value"}}
Пример
Атрибут body также полезен при работе с веб-хуками, когда данные приходят в формате XML или других нестандартных форматах:
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def webhook_view(request):
xml_data = request.body
# Здесь можно парсить XML
return HttpResponse(f"Received XML: {xml_data[:100]}...")
Результат выполнения кода:
"Received XML: b'<?xml version=\"1.0\" ...'..."
Смотрите также
-
атрибут
GET,
который предоставляет доступ к данным GET-запроса -
атрибут
POST,
который предоставляет доступ к данным POST-запроса -
атрибут
FILES,
который содержит загруженные файлы в запросе -
класс
HttpRequest,
основной класс для работы с запросами в Django