我是Python界的新手,几个月前刚刚开始了我的第一份DJango工作(过去十年的PHP)。我在一个端点上使用Django REST API,在那里我需要返回一个XML字符串,但是环顾四周,似乎没有一个内置的渲染器允许您简单地传递一个要按原样返回的字符串?
我看到HTTPResponse可以工作,但Response不行,一位同事告诉我,Response是创建渲染器的更好选择。我认为基于源代码它看起来非常简单,基本上这是最基本的:
class PassThroughRenderer(BaseRenderer):
media_type = None
format = None
def render(self, data, accepted_media_type=None, renderer_context=None):
return data我的视图(稍微修剪了一下,但只有一些模型存储):
def post(self, request):
original_soap = request.body
try:
parsed_soap = xmltodict.parse(original_soap)
except xml.parsers.expat.ExpatError:
return Response(dicttoxml({'invalid_xml': True}), content_type='text/xml', status=422)
parsed_soap = self.strip_sf_prefix(parsed_soap)
config = yaml.load(settings.SALESFORCE_CRED)
organization_id = config['organization_id']
if parsed_soap['soapenv:Envelope']['soapenv:Body']['notifications']['OrganizationId'] != organization_id:
return Response(dicttoxml({'unauthorized': True}), content_type='text/xml', status=401)
return Response(SALESFORCE_RESPONSE, content_type='text/xml')不幸的是,当我运行它(在我的APIView类中添加了renderer_classes = (utils.PassThroughRenderer,) )时,我得到了'Request' object has no attribute 'accepted_renderer'和一个似乎没有命中我编写的任何代码的回溯。
发布于 2018-10-09 23:49:08
看起来我必须显式地将media_type设置为非None值。设置一个默认值(我无论如何都会覆盖它)允许渲染器运行。
https://stackoverflow.com/questions/52724487
复制相似问题