Django Piston:定义返回元素的优先级

发布于 2024-11-15 11:49:19 字数 593 浏览 5 评论 0原文

让我们看这个示例:

url(r'^test[/]$', test_handler, { 'emitter_format': 'xml' }),

使用以下处理程序:

class testHandler(BaseHandler):
    allowed_methods = ('GET',)
    def read(self, request):
        return {'element': 'I want to be first', 'test': 'No way', }

调用 API 时的结果将是:

Content-Type: text/xml; charset=utf-8
<?xml version="1.0" encoding="utf-8"?>
<response><test>No way</test><element>I want to be first</element></response>

我不想首先得到“不行”,那么如何定义返回元素的顺序优先级?

Let's take this sample :

url(r'^test[/]

With the following handler :

class testHandler(BaseHandler):
    allowed_methods = ('GET',)
    def read(self, request):
        return {'element': 'I want to be first', 'test': 'No way', }

The result when calling the API will be :

Content-Type: text/xml; charset=utf-8
<?xml version="1.0" encoding="utf-8"?>
<response><test>No way</test><element>I want to be first</element></response>

I don't want to get the 'No way' in first place, so how to define an order priority on the elements returned ?

, test_handler, { 'emitter_format': 'xml' }),

With the following handler :

The result when calling the API will be :

I don't want to get the 'No way' in first place, so how to define an order priority on the elements returned ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

暮凉 2024-11-22 11:49:19

我通过创建自己的发射器找到了答案:

class CustomXmlEmitter(Emitter):
    def _to_xml(self, xml, data):
        if isinstance(data, (list, tuple)):            
            for item in data:
                self._to_xml(xml, item)
        elif isinstance(data, dict):
            for key, value in data.iteritems():
                xml.startElement(key, {})
                self._to_xml(xml, value)
                xml.endElement(key)
        else:
            xml.characters(smart_unicode(data))

    def render(self, request):
        stream = StringIO.StringIO()
        xml = SimplerXMLGenerator(stream, "utf-8")
        xml.startDocument()
        xml.startElement("response", {})
        self._to_xml(xml, self.construct())
        xml.endElement("response")
        xml.endDocument()
        return stream.getvalue()
Emitter.register('custom_xml', CustomXmlEmitter, 'text/xml; charset=utf-8')
Mimer.register(lambda *a: None, ('text/xml',))

并返回以这种方式嵌套的元素:

return [{'element': 'I want to be first'}, {'test': 'No way', }]

I found an answer by creating my own Emitter :

class CustomXmlEmitter(Emitter):
    def _to_xml(self, xml, data):
        if isinstance(data, (list, tuple)):            
            for item in data:
                self._to_xml(xml, item)
        elif isinstance(data, dict):
            for key, value in data.iteritems():
                xml.startElement(key, {})
                self._to_xml(xml, value)
                xml.endElement(key)
        else:
            xml.characters(smart_unicode(data))

    def render(self, request):
        stream = StringIO.StringIO()
        xml = SimplerXMLGenerator(stream, "utf-8")
        xml.startDocument()
        xml.startElement("response", {})
        self._to_xml(xml, self.construct())
        xml.endElement("response")
        xml.endDocument()
        return stream.getvalue()
Emitter.register('custom_xml', CustomXmlEmitter, 'text/xml; charset=utf-8')
Mimer.register(lambda *a: None, ('text/xml',))

and return the element nested this way :

return [{'element': 'I want to be first'}, {'test': 'No way', }]
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文