Django REST Framework默认提供了JSON、HTML等渲染器,但没有内置XML渲染支持,需要开发者自行扩展实现XML格式的数据返回。下面会一步步讲解完整的实现流程。

前置准备
要实现XML渲染,首先需要安装处理XML的Python库,这里选择xmltodict,它可以方便地在字典和XML字符串之间进行转换,执行以下命令安装:
pip install xmltodict
自定义XML渲染器
DRF的渲染器需要实现BaseRenderer类的render方法,我们自定义一个XML渲染器,将接口返回的字典数据转换为XML格式字符串。
from rest_framework.renderers import BaseRenderer
import xmltodict
class XMLRenderer(BaseRenderer):
# 媒体类型设置为application/xml
media_type = 'application/xml'
# 渲染器格式标识
format = 'xml'
# 字符编码
charset = 'utf-8'
def render(self, data, accepted_media_type=None, renderer_context=None):
"""
将数据渲染为XML格式
:param data: 接口返回的字典数据
:return: XML格式字符串
"""
if data is None:
return ''
# 给数据包裹一个根节点,默认根节点名为response
xml_data = {
'response': data
}
# 将字典转换为XML字符串,pretty=True表示格式化输出
xml_str = xmltodict.unparse(xml_data, pretty=True)
return xml_str.encode(self.charset)
配置渲染器使用方式
全局配置
如果希望所有接口默认都支持XML渲染,可以在Django的配置文件settings.py中添加渲染器配置:
REST_FRAMEWORK = {
'DEFAULT_RENDERERS': [
'rest_framework.renderers.JSONRenderer', # 保留JSON渲染器
'your_project.renderers.XMLRenderer', # 替换为你的XMLRenderer实际路径
]
}
局部配置
如果只需要部分接口支持XML渲染,可以在对应的视图类中单独设置renderer_classes属性:
from rest_framework.views import APIView
from rest_framework.response import Response
from your_project.renderers import XMLRenderer
class TestXMLView(APIView):
# 仅该视图支持JSON和XML两种渲染格式
renderer_classes = [JSONRenderer, XMLRenderer]
def get(self, request):
data = {
'code': 200,
'msg': '请求成功',
'data': {
'name': '测试数据',
'value': 123
}
}
return Response(data)
请求解析注意事项
如果还需要支持接收XML格式的请求数据,需要额外配置解析器,DRF默认没有XML解析器,同样可以自定义实现:
from rest_framework.parsers import BaseParser
import xmltodict
class XMLParser(BaseParser):
media_type = 'application/xml'
charset = 'utf-8'
def parse(self, stream, media_type=None, parser_context=None):
"""
解析XML格式的请求数据
:param stream: 请求数据流
:return: 解析后的字典数据
"""
xml_str = stream.read().decode(self.charset)
# 将XML字符串转换为字典
data = xmltodict.parse(xml_str)
# 去掉之前渲染时加的根节点response
return data.get('response', {})
配置好解析器后,客户端发送Content-Type为application/xml的请求,DRF就可以正确解析请求中的XML数据了。如果需要全局支持XML请求解析,可以在settings.py的REST_FRAMEWORK配置中添加DEFAULT_PARSER_CLASSES,加入自定义的XMLParser路径即可。
测试验证
启动Django服务后,使用请求工具发送GET请求,在请求头中指定Accept为application/xml,就可以得到XML格式的返回数据:
<?xml version="1.0" encoding="utf-8"?>
<response>
<code>200</code>
<msg>请求成功</msg>
<data>
<name>测试数据</name>
<value>123</value>
<data>
</response>
如果出现格式错误,可以检查自定义渲染器中的根节点设置,或者xmltodict的转换逻辑是否符合业务需求,也可以根据实际场景调整XML的节点结构。
Django_REST_FrameworkXML渲染DRF解析器PythonREST_API修改时间:2026-06-09 16:30:23