簡體   English   中英

自定義Django Rest解析器

[英]Custom django rest parser

這是我的代碼:

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文件。

這是因為用於呈現響應的呈現器是HTMLRenderer。 DRF 通過內容協商確定要使用的渲染器:

視圖的有效渲染器集始終定義為類列表。 進入視圖后,REST框架將對傳入的請求執行內容協商,並確定最合適的渲染器以滿足該請求。

內容協商的基本過程涉及檢查請求的Accept報頭,以確定它在響應中期望的媒體類型。 可選地,URL上的格式后綴可以用於顯式請求特定的表示形式。 例如,URL http://example.com/api/users_count.json可能是始終返回JSON數據的終結點。

在URL的末尾使用.xml ,它應該選擇XMLRenderer。

為了將響應限制為xml,請在視圖中指定XMLRenderer:

class MyView(APIView):

    renderer_classes = (XMLRenderer,)

    ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM