You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何借助DRF从Serializer提取XML数据用于外部API POST请求

问题解答

核心结论

  • 直接通过Serializer的.data属性无法获取XML格式数据,该属性默认返回Python原生的字典/列表序列化结果
  • 不需要手动编写完整的XML生成逻辑,可以直接复用DRF的现有能力实现需求,还能自动处理XML特殊字符转义,避免手动拼接出现的格式错误

具体实现步骤

  1. 首先安装DRF官方维护的XML扩展依赖
    pip install djangorestframework-xml

  2. 按照业务提交的XML字段规则,正常定义对应的Serializer即可,不需要绑定到任何视图。

  3. 实例化Serializer完成数据校验和序列化,再调用XML渲染器生成目标XML内容,示例代码如下:

from rest_framework_xml.renderers import XMLRenderer
# 导入你自定义的Serializer
from your_app.serializers import YourBusinessSerializer

# 构造要提交的业务数据
business_data = {
    "username": "test",
    "order_id": "123456",
    "amount": 100
}

# 序列化+校验数据
serializer = YourBusinessSerializer(data=business_data)
serializer.is_valid(raise_exception=True)

# 生成XML内容
xml_bytes = XMLRenderer().render(serializer.data)
# 转为字符串即可直接作为POST请求的body提交
xml_str = xml_bytes.decode("utf-8")

特殊格式适配

如果需要调整XML的根节点名称、子元素节点名称等自定义规则,可以继承XMLRenderer实现自定义渲染逻辑,示例如下:

from rest_framework_xml.renderers import XMLRenderer

class MyCustomXMLRenderer(XMLRenderer):
    # 自定义XML根节点名称,默认是root
    root_tag_name = "request"
    # 自定义列表元素的节点名称,默认是list-item
    item_tag_name = "record"

如果业务数据包含嵌套结构,只需按DRF规范定义嵌套Serializer即可,渲染器会自动生成对应层级的XML结构,无需额外处理。


内容的提问来源于stack exchange,提问作者Vasanth Mohan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 11:09:03