发布于 2015-09-13 08:05:39 | 258 次阅读 | 评论: 0 | 来源: PHPERZ

接收数据(Receiving data)

Piston运行在HTTP协议上,对于post的数据处理得很好,对于其他格式(JSON或YAML)的数据也处理得不错。

Piston既能接收链值对数据,也很容易接收结构化数据。 Piston会尝试通过一组”loader”来反序列化传入的非form数据,这些”loader”取决于客户端指定的内容类型(Content-type)。

举个例子,如果我们给一个handler发送JSON数据,JSON内容类型(Content-Type)是 “application/json” ,Piston会做下面两件事情:

# 将反序列化后的数据存放在 request.data 中 # 将 request.content_type 设为 application/json 。对于form提交的数据而言,request.content_type 则总是 None.

可以如下这般使用 (查看 testapp/handlers.py):

#!python

    def create(self, request):
        if request.content_type:
            data = request.data

            em = self.model(title=data['title'], content=data['content'])
            em.save()

            for comment in data['comments']:
                Comment(parent=em, content=comment['content']).save()

            return rc.CREATED
        else:
            super(ExpressiveTestModel, self).create(request)

如果我们传送下列JSON数据,也可以被很好的处理:

#!python

{"content": "test", "comments": [{"content": "test1"}, {"content": "test2"}], "title": "test"}

handler接收的任何数据都会被正常的反序列化,所以只要内容一致,无论格式是YAML还是XML,handler都能正常处理。

如果handler不接受客户端发送的数据(可能需要其他格式),可以用 utils.require_mime 装饰器来指定某种数据类型来解决这个问题。

该装饰器可以接收四种数据格式,以其短语名称来指定,分别是 ‘json’, ‘yaml’, ‘xml’ 和 ‘pickle’ 。

比如:

#!python
class SomeHandler(BaseHandler):
    @require_mime('json', 'yaml')
    def create(...

    @require_extended
    def update(...
最新网友评论  共有(0)条评论 发布评论 返回顶部

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