Django REST Framework怎么渲染XML

来源:网站建设作者:Ada头衔:草根站长
导读:本期聚焦于小伙伴创作的《Django REST Framework怎么渲染XML》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《Django REST Framework怎么渲染XML》有用,将其分享出去将是对创作者最好的鼓励。

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

Django REST Framework怎么渲染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

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。