发布于 2015-09-13 08:16:57 | 291 次阅读 | 评论: 0 | 来源: PHPERZ

资源(Resources)

资源(Resource)指的是代码中映射各种数据的实体。可以是博文、评论以及其他任何数据。

(Wrongway吐槽:其实这一节是讲Handler的...)

下面,我们在handlers.py中创建一个简单的handler:

#!python

from piston.handler import BaseHandler
from myapp.models import Blogpost

class BlogpostHandler(BaseHandler):
   allowed_methods = ('GET',)
   model = Blogpost

   def read(self, request, post_slug):
      ...

Piston通过handler将资源与models进行映射,这个过程中Piston做了很多繁重的幕后工作,为开发者节省了大量精力。

Resource必须是一个类,通常情况下,Resource要实现下列四个方法中的一个或多个:

read: GET 动作调用,获取对象而不做数据修改(该方法是幂等的)
create: POST 动作调用,创建新对象(们)并返回该对象(们)(或是返回 rc.CREATED.)
update: PUT 动作调用,更新某个已存在的对象并返回该对象(或是返回 rc.ALL_OK.)
delete: DELETE 动作调用,删除某个已存的对象,只返回 rc.DELETED
 

除此之外,我们还可以定义其他我们所需的方法。只要在 fields 中填写方法名称,该方法就会被调用, 并在调用时自动传入 model 的实例做为参数。 该方法的返回值将用做该key(方法名称)的值,返回值不做限制,可以为任意类型。

NB: 上述自定义的 “resource methods” 应该被 @classmethod 修饰。因为使用这些自定义方法时Piston未必会对Handler进行实例化。 假设你已经定义了一个UserHandler类,并在该类中自定义了一个返回User对象的方法,在这种情况下,Piston是不会调用 UserHandler实例的自定义对象方法, 只会调用UserHander类的自定义的类方法。

一个handler即可以表示单独的一个对象,也可以表示多个对象的集合,因此我们可以在read()方法中分别处理这两种情况:

#!python

from piston.handler import BaseHandler
from myapp.models import Blogpost

class BlogpostHandler(BaseHandler):
    allowed_methods = ('GET',)
    model = Blogpost

    def read(self, request, blogpost_id=None):
        """
        Returns a single post if `blogpost_id` is given,
        otherwise a subset.

        """
        base = Blogpost.objects

        if blogpost_id:
            return base.get(pk=blogpost_id)
        else:
            return base.all() # Or base.filter(...)
最新网友评论  共有(0)条评论 发布评论 返回顶部

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