发布于 2015-09-13 08:08:53 | 212 次阅读 | 评论: 0 | 来源: PHPERZ
...
我 们创建某个绑定model的handler时,Piston会自动通过metaclass对handler进行注册。接下来, 如果其他hander返回该model的一个对象,且这个handler本身并没有定义fields,那么Piston就会使用之前捆绑该model的 handler中的fields来提供内容。
举个例子,下面这个handler:
#!python class FooHandler(BaseHandler): model = Foo fields= ('id', 'title')
绑定了 ‘Foo’ 。接下来:
#!python def read(...): f = Foo.objects.get(pk=1) return { 'foo': f }
Piston将返回’f’的’id’和’title’字段。但这两个字段并不是我们想要的,就可以象下面这样定义字段:
#!python class OtherHandler(BaseHandler): fields = ('something', ('foo', ('title', 'content'))) def read(...): f = Foo.objects.get(pk=1) return { 'foo': f }
这样,Piston会返回’f’的’title’和’content’,而不是之前的’id’和’title’。关于fields内嵌的深度,Piston是不做限制的。
如果我们想重置metaclass和内嵌的fields,只要用 (‘foo’, ()) 就可以一次取出model实例的所有字段内容。
NB: 在新版本的Piston中, fields 指定的字段包含信息会覆盖 exclude 中的字段排除信息。
Piston排除models的ID,其充分理由是 通常情况下 ID应该做为内部非公开属性,不应该暴露给用户。 在 必须 包含’id’的情况下,我们可以重设’exclude’来实现:
#!python class SomeHandler(BaseHandler): exclude = ()
如果想覆写默认的全局设置,可以用下列的代码:
#!python from piston.handler import BaseHandler, AnonymousBaseHandler BaseHandler.fields = AnonymousBaseHandler.fields = ()
http://bitworking.org/projects/URI-Templates/] 定义了如何构造访问WEB资源的URL。根据下列URL模板:
http://www.yourproject.com/api/post/{id}/
以及变量值
id := 1
所得到的网址就是:
http://www.yourproject.com/api/post/1/
如 Stephan Preeker (http://groups.google.com/group/django-piston/browse_thread/thread/1ca2fd1c89f3df4e) 中提到的, 我们可以在已认证的handler中调用匿名handler,如下:
#!python class handler( .. ) def read(self, request, id): self.anonymous.read(id=id)
上述代码能够工作,是因为 self.anonymous 指向匿名handler,因此我们可以直接引用匿名方法。
Piston最初在Bitbucket内部使用,随后将其开源。Bitbucket的API已经实现版本化,大家可以在 http://api.bitbucket.org/ 找到最新版本。
如果您感觉Piston还不错,不妨将您应用Piston的网站做为案例添加进来