发布于 2015-09-13 08:02:40 | 224 次阅读 | 评论: 0 | 来源: PHPERZ
Piston的URL映射规则与Django无异。以BlogpostHandler为例:
在 urls.py 中:
#!python from django.conf.urls.defaults import * from piston.resource import Resource from mysite.myapp.api.handlers import BlogpostHandler blogpost_handler = Resource(BlogpostHandler) urlpatterns = patterns('', url(r'^blogpost/(?P<post_slug>[^/]+)/', blogpost_handler), url(r'^blogposts/', blogpost_handler), )
见上,任何对 /api/blogpost/some-slug-here/ 和 /api/blogposts/ 的访问都映射到BlogpostHandler, 分别对应同一个handler的两种不同数据集。 要注意:一个单独的handler可以处理单个对象,也可以处理多个对象的集合。
资源也可以是匿名的(“anonymous”)。匿名资源即是一种可以实例化的特殊资源, 它用于未经授权(未通过OAuth,Basic或是其他认证handler)的请求。
举个例子,本文前面的BlogpostHandler,允许匿名访问博文。 但我们并不想让匿名用户也能够创建/更新/删除博文,也不想让未经授权的用户看到所有字段。
类似的需求可以通过创建继承自AnonymousBaseHandler(而不是BaseHandler)的新handler来实现。 这样做可以省却很多繁重的工作量。
如下:
#!python from piston.handler import AnonymousBaseHandler, BaseHandler class AnonymousBlogpostHandler(AnonymousBaseHandler): model = Blogpost fields = ('title', 'content') class BlogpostHandler(BaseHandler): anonymous = AnonymousBlogpostHandler # same stuff as before
我们没必要为了使用匿名handlers,就设置一个继承自BaseHandler的代理handler(“proxy handler”)。 反而是象上例这般直接指向一个匿名资源,更为实用。