首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自定义渲染器中断站点

自定义渲染器中断站点
EN

Stack Overflow用户
提问于 2018-10-09 23:24:52
回答 1查看 31关注 0票数 1

我是Python界的新手,几个月前刚刚开始了我的第一份DJango工作(过去十年的PHP)。我在一个端点上使用Django REST API,在那里我需要返回一个XML字符串,但是环顾四周,似乎没有一个内置的渲染器允许您简单地传递一个要按原样返回的字符串?

我看到HTTPResponse可以工作,但Response不行,一位同事告诉我,Response是创建渲染器的更好选择。我认为基于源代码它看起来非常简单,基本上这是最基本的:

代码语言:javascript
复制
class PassThroughRenderer(BaseRenderer):
    media_type = None
    format = None

    def render(self, data, accepted_media_type=None, renderer_context=None):
        return data

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

代码语言:javascript
复制
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'和一个似乎没有命中我编写的任何代码的回溯。

EN

回答 1

Stack Overflow用户

发布于 2018-10-09 23:49:08

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52724487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档