自定义Django的休息解析器(Custom django rest parser)

2019-10-21 20:53发布

这是我的代码:

class lista_libros(APIView):
def post(self, request, format=None): #, format=None
    cadena64 = request.data
    xmlfile = base64.b64decode(cadena64)
    #serializer = PruebaSerializer(data = xmlfile)
    #if serializer.is_valid():
        #serializer.save()
        #return Response(serializer.data, status=status.HTTP_201_CREATED)
    return Response(xmlfile)

这是我得到:

<?xml version="1.0" encoding="utf-8"?>
<root>&lt;libro&gt;
&lt;nombre&gt;Juego de tronos&lt;/nombre&gt;
&lt;autor&gt;Pablo Perez.&lt;/autor&gt;
&lt;categoria&gt;Fantasia&lt;/categoria&gt;
&lt;editorial&gt;Mexicana&lt;/editorial&gt;
&lt;fecha_pub&gt;1992&lt;/fecha_pub&gt;
&lt;no_pag&gt;5000&lt;/no_pag&gt;
&lt;/libro&gt;</root>

为什么比符号下部和更大的出现像&lt和&GT代替<和>

这个代码仅仅是尝试后一个base64字符串,并将其解码成XML文件。

Answer 1:

这是因为用来呈现响应渲染器是HTMLRenderer。 DRF确定要使用的渲染器,通过使用内容协商 :

该组的视图有效的渲染器始终定义为类的列表。 当输入的图REST框架将传入请求进行内容协商,并确定最适当的渲染器,以满足该请求。

内容协商的基本过程包括检查请求的接受头,以确定它希望在响应的媒体类型。 任选地,明确地请求一个特定的表示可以被用在URL格式后缀。 例如,URL http://example.com/api/users_count.json可能是一个端点总是返回JSON数据。

使用.XML在URL的末尾,它应该选择XMLRenderer。

为了限制到XML响应,指定XMLRenderer在您查看:

class MyView(APIView):

    renderer_classes = (XMLRenderer,)

    ...


文章来源: Custom django rest parser