介绍
- 通常我们与自己的前端交互时,会采用标准的json数据;
- 但是我们与其他第三方服务交互时,就需要将xml转化为json,处理完成后再将数据转化成xml返回;
- 而djangorestframework官方推荐的第三方包,来回xml/dict转换的结果不一致,所以我自己实现了一个render。
我的依赖包
Django == 2.2.11
djangorestframework == 3.10.3
xmltodict
xmltodict的基本使用
import xmltodict
# xml to dict
xmltodict.parse(xml_data)
# dict to xml
xmltodict.unparse(dict_data)
结合Django返回response
# 自定义xml render
from rest_framework.renderers import BaseRenderer
class XMLRenderer(BaseRenderer):
"""
Renderer which serializes to XML.
"""
media_type = 'application/xml'
format = 'xml'
charset = 'utf-8'
def render(self, data, accepted_media_type=None, renderer_context=None):
"""
Renders `data` into serialized XML.
"""
return xmltodict.unparse(data)
# view视图中指定render,将dict转化为xml返回
from rest_framework.viewsets import GenericViewSet
from rest_framework.response import Response
class View(GenericViewSet):
def get(self, request, **kwargs):
# 这一步指定accepted_renderer十分重要
self.request.accepted_renderer = XMLRenderer()
return Response(content, status=200, content_type='application/xml;charset=utf8')