gpt4 book ai didi

python - 自定义渲染器破坏站点

转载 作者:行者123 更新时间:2023-12-01 08:57:06 25 4
gpt4 key购买 nike

我是 DJango 世界的新手,几个月前刚刚开始我的第一份 Python 工作(过去十年的 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

我的 View (稍微修剪一下,但只有一些模型存储):

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,) 添加到我的 APIView 类中),我得到 'Request' 对象没有属性 'accepted_renderer' 和回溯似乎没有命中我编写的任何代码。

最佳答案

看起来我必须将 media_type 显式设置为非 None 值。设置默认值(无论如何我都会覆盖它)允许渲染器运行。

关于python - 自定义渲染器破坏站点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52724487/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com