Невозможно получить доступ к request.data в фильтре журнала

Я использую Django REST Framework и следую этому ответу django logging - django.request logger and extra context для включения пользовательских данных в мои записи журнала. При попытке получить доступ к record.request.data внутри filter() (чтобы сохранить его в record.data, как предлагается в этом ответе) я получаю RawPostDataException: You cannot access body after reading from request's data stream. Я перепробовал множество способов, но ни один из них не помог. Не могу вручную перемотать поток данных запроса, ни получить свежую копию объекта запроса. Я никогда не обращаюсь вручную к request.body, как советуют избегать в ответах SO. Любая помощь будет принята с благодарностью.

Вот код:

import logging

from rest_framework.request import Request
from rest_framework.settings import api_settings


class RequestInfoFilter(logging.Filter):

    def filter(self, record):
        parsers = [parser() for parser in api_settings.DEFAULT_PARSER_CLASSES]
        authenticators = [
            auth() for auth in api_settings.DEFAULT_AUTHENTICATION_CLASSES]
        request = Request(
            record.request, parsers=parsers, authenticators=authenticators)

        record.method = request.method
        record.query_params = request.query_params
        record.data = request.data  # RawPostDataException: You cannot access body after reading from request's data stream

        return True

Обратите внимание, что это происходит только при регистрации представлений, которые сами обращаются к request.data, если они этого не делают, то ошибка не возникает.

Вернуться на верх