Платформа Django REST Framework — XMLRenderer изменяет мой простой XML-ответ

#django #django-rest-framework

Вопрос:

Я хочу отправить простую текстовую строку CXML, как показано ниже, в качестве ответа на запрос DRF POST в представление django (см. Мое представление django ниже).

 <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE cXML SYSTEM 
"http://xml.cXML.org/schemas/cXML/1.2.011/cXML.dtd"><cXML payloadID="2021-10- 
19T03:57:08.416995@example.com" timestamp="2021-10-19T04:01:56.530426 00:00"><Response><Status 
code="200" text="Success" /></Response></cXML>
 

(Приведенная выше строка является значением переменной ‘response_cxml’ в моем представлении django ниже)

Но то, что django отправляет и получает удаленное приложение, — это:

 <?xml version="1.0" encoding="utf-8"?>
<root>amp;<?xml version="1.0" encoding="UTF-8"?amp;>amp;<!DOCTYPE cXML SYSTEM 
"http://xml.cXML.org/schemas/cXML/1.2.011/cXML.dtd"amp;>amp;<cXML payloadID="2021-10- 
19T05:10:41.115609@example.com" timestamp="2021-10- 
19T05:10:41.115674 00:00"amp;>amp;<Responseamp;>amp;<Status code="200" text="Success" 
/amp;>amp;</Responseamp;>amp;</cXMLamp;></root>
 

Я считаю, что XMLREnderer добавляет дополнительный тег дублированной версии и тег «root».Это также url-кодирование xml-символов, таких как<, > и т.д.<,>Как я могу запретить XMLREnderer изменять мой ответ? Заголовки HTTP отправителя являются Accept= «текст/xml» и content-type= «текст/xml».

Мое мнение:

 @csrf_exempt
@api_view(['PUT','POST'])
@authentication_classes((TokenAuthentication,))
@permission_classes((IsAuthenticated,))
@renderer_classes([XMLRenderer])
@parser_classes([XMLParser])
def purchase_order(request):
"""
Receives the purchase order cXML and saves PO details to database.
Sends a 200 response back
"""
if request.method == 'PUT' or  request.method == 'POST':
    po_cxml = request.body.decode()
    response_cxml = process_po_cxml(po_cxml)
    return Response( response_cxml.encode('utf-8'))