自定义django休息解析器

时间:2015-02-13 22:16:36

标签: python django post django-rest-framework

这是我的代码:

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>

为什么较低和较大的符号显示为&amp; lt和&amp; gt而不是&lt;和&gt;

此代码仅用于尝试POST一个base64字符串并将其解码为xml文件。

1 个答案:

答案 0 :(得分:0)

这是因为用于呈现响应的渲染器是HTMLRenderer。 DRF确定渲染器使用by using content negotiation

  

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

     

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

在网址末尾使用 .xml ,它应该选择XMLRenderer。

为了限制对xml的响应,请在您查看中指定XMLRenderer:

class MyView(APIView):

    renderer_classes = (XMLRenderer,)

    ...