发布于 2015-09-13 08:02:34 | 400 次阅读 | 评论: 0 | 来源: PHPERZ

发射器(Emitters)

发射器(Emitters) 表示输出的数据类型,可以是 YAML, JSON, XML, Pickle 或 Django ,分别对应 emitters.py 中的 XMLEmitter, JSONEmitter, YAMLEmitter, PickleEmitterDjangoEmitter

编写自己的emitters也很容易,要做的仅仅是创建一个继承 Emitter 的派生类,然后在其中创建 render 方法。 render方法接收一个 ‘request’ 参数,该参数是一个请求(request)对象的拷贝。 多了解一下request.GET是很有必要的。 (比如定义回调,JSON的输出)

要将数据进行序列化/渲染,需要调用 self.construct() ,该方法始终返回一个数据字典,我们就可以对字典做任何想做的操作,再将其返回(返回值须是unicode字符串)。

NB: 可以用 Emitter.register 函式注册Emitters,同样也可以用 Emitter.unregister 函式来移除注册(假使你想移除一个内置emitter)。

内置的emitter注册:

#!python

class JSONEmitter(Emitter):
    ...

Emitter.register('json', JSONEmitter, 'application/json; charset=utf-8')

自定义emitter时,可以引入Emitter模块并调用 ‘register’ 对其注册,从而使自定义的emitter生效。 也可以利用同名数据类型(即传入的第一个参数)来覆写内置或是已存在的emitters。

上述实践,使得Piston添加其他形式的Emitter扩展变得非常容易,比如protocal buffers或是CSV。

可 以通过 ‘?format=’ GET参数(例如 ‘/api/blogposts/?format=yaml’)为Emitter设置格式。不过新版本的Piston中,我们可以在URL映射中配置 ‘emitter_format’ 关键字参数来设置Emitters(与’format’关键字并不冲突),如下:

#!python

urlpatterns = patterns('',
   url(r'^blogposts(?P<emitter_format>.+)$', ...),
)

这样,/blogposts.json 就会使用 JSON emitter。

此外,我们还可以在URL映射中直接设置关键字参数来指定emitter格式:

#!python

urlpatterns = patterns('',
   url(r'^blogposts$', resource_here, { 'emitter_format': 'json' }),
)
最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务