Пользовательский рендерер взлома сайта - PullRequest
0 голосов
/ 09 октября 2018

Я новичок в мире DJango, только что начал свою первую работу на Python несколько месяцев назад (PHP dev за последнее десятилетие).Я работаю с Django REST API на конечной точке, где мне нужно вернуть строку XML, но, оглядываясь по сторонам, кажется, что ни один из встроенных средств визуализации не позволяет просто передать строку, которая будет возвращена как есть?

Я видел, что HTTPResponse работает, а Response - нет, и коллега сказал мне, что Response - лучший выбор и для создания средства визуализации.Я думал, что это кажется довольно простым на основе исходного кода, в основном это был минимум:

class PassThroughRenderer(BaseRenderer):
    media_type = None
    format = None

    def render(self, data, accepted_media_type=None, renderer_context=None):
        return data

Мое представление (немного обрезано, но только для некоторой модели памяти):

def post(self, request):
    original_soap = request.body
    try:
        parsed_soap = xmltodict.parse(original_soap)
    except xml.parsers.expat.ExpatError:
        return Response(dicttoxml({'invalid_xml': True}), content_type='text/xml', status=422)
    parsed_soap = self.strip_sf_prefix(parsed_soap)

    config = yaml.load(settings.SALESFORCE_CRED)
    organization_id = config['organization_id']

    if parsed_soap['soapenv:Envelope']['soapenv:Body']['notifications']['OrganizationId'] != organization_id:
        return Response(dicttoxml({'unauthorized': True}), content_type='text/xml', status=401)

    return Response(SALESFORCE_RESPONSE, content_type='text/xml')

К сожалению, когда я запускаю это (добавив renderer_classes = (utils.PassThroughRenderer,) в мой класс APIView), я получаю 'Request' object has no attribute 'accepted_renderer' и трассировку, которая, кажется, не затрагивает ни один код, который я написал.

1 Ответ

0 голосов
/ 09 октября 2018

Похоже, мне пришлось явно установить media_type в не None значение.Установка значения по умолчанию (которое я в любом случае переопределяю) позволила запускать рендерер.

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