django - Django REST Framework - XMLRenderer 修改我的简单 XML 响应
问题描述
我想发送一个简单的 CXML 文本字符串,作为对 django 视图的 DRF POST 请求的响应(请参阅下面的我的 django 视图)
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE cXML SYSTEM
"http://xml.cXML.org/schemas/cXML/1.2.011/cXML.dtd"><cXML payloadID="2021-10-
19T03:57:08.416995@example.com" timestamp="2021-10-19T04:01:56.530426+00:00"><Response><Status
code="200" text="Success" /></Response></cXML>
(上面的字符串是下面我的 django 视图中的“response_cxml”变量的值)
但是django发送和远程应用程序接收的是:
<?xml version="1.0" encoding="utf-8"?>
<root><?xml version="1.0" encoding="UTF-8"?><!DOCTYPE cXML SYSTEM
"http://xml.cXML.org/schemas/cXML/1.2.011/cXML.dtd"><cXML payloadID="2021-10-
19T05:10:41.115609@example.com" timestamp="2021-10-
19T05:10:41.115674+00:00"><Response><Status code="200" text="Success"
/></Response></cXML></root>
XMLREnderer 我相信添加了额外的重复版本标签和“根”标签。它也是 urlencoding xml 字符,如 <、> 等。如何防止 XMLRRenderer 修改我的响应?发件人 HTTP 标头是 Accept= "text/xml 和 content-type='text/xml'
我的观点:
@csrf_exempt
@api_view(['PUT','POST'])
@authentication_classes((TokenAuthentication,))
@permission_classes((IsAuthenticated,))
@renderer_classes([XMLRenderer])
@parser_classes([XMLParser])
def purchase_order(request):
"""
Receives the purchase order cXML and saves PO details to database.
Sends a 200 response back
"""
if request.method == 'PUT' or request.method == 'POST':
po_cxml = request.body.decode()
response_cxml = process_po_cxml(po_cxml)
return Response( response_cxml.encode('utf-8'))
解决方案
推荐阅读
- php - php apache无法设置cookie
- powershell - 在子字符串中将小时数添加到日期时间
- mysql - Python,如何从 MySQL 的元组中获取平均值?
- node.js - 如何使用 findByIdAndUpdate 使用 Mongoose 更改子数组
- google-apps-script - 在 Appscript 中读取当前打开的消息线程
- vba - DoCmd.OpenForm 以只读模式打开表单。访问 2016 (VBA)
- linux - 使用 sed 替换文件中的变量文字值
- elasticsearch - Elasticsearch 使用 AND 和 OR 运算符匹配多个字段不起作用
- machine-learning - DBSCAN 和边界点
- rust - 如何通过 libc::getgroups 为用户获取组?