我刚进入Django世界,几个月前刚开始我的第一个python工作(过去十年的php-dev)。我在一个端点上使用DjangoRESTAPI,在这里我需要返回一个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')
不幸的是,当我运行时
renderer_classes = (utils.PassThroughRenderer,)
去我的观景课),我得到
'Request' object has no attribute 'accepted_renderer'
以及一个似乎没有击中我写的任何代码的回溯。
我希望有人能帮我找出我哪里做错了?