使用Python前夕如何添加一些自我进程?

时间:2015-04-09 05:39:32

标签: python flask eve

如何在使用Python eve时添加一些自我进程?

例如,这是我的活动架构。

schema = {
        'id': {
            'type': 'integer',
            'readonly': True,
            'unique': True,
        },

        'name': {
            'type': 'string',
            'minlength': 3,
            'maxlength': 20,
            'required': True,
        },

        'date': {
            'type': 'datetime',
        },

        'location': {
            'type': 'string',
        },

        'icon': {
            'type': 'media',
        },

        'type': {
            'type': 'integer',
            'allowed': [i for i in range(5)],
        },

        'info': {
            'type': 'list',
        },

        'share': {
            'type': 'dict',
            'readonly': True,
            'schema': {
                'url': {
                    'type': 'string',
                },
                'qr': {
                    'type': 'media',
                }
            }
        },
        'publisher': {
            'type': 'list',
        },
        'participators': {
            'type': 'list',
        },
     }

我想在使用POST创建活动时生成共享url和qr-code,并给它一个简单的ID,如001,我已经实现了生成类似qr代码生成器的代码,但我不知道如何在信息发布之后和保存到MongoDB之前添加所有这些功能。

我见过类似Event Hook的内容,但我仍然不知道如何实现这一点,比如修复POST数据或其他功能。

你能告诉我一些datail的例子吗,非常感谢你。

1 个答案:

答案 0 :(得分:3)

在验证并解析了on_insert请求后 您可以将回调函数挂钩到POST并在愿望时操纵有效负载,如下所示:

on_insert

您也可以使用from eve import Eve def manipulate_inbound_documents(resource, docs): if resource == 'activity': for doc in docs: doc['id_field'] = '001' doc['qr'] = 'mycqcode' app = Eve() app.on_insert += manipulate_inbound_documents if __name__ == '__main__': app.run() ,如下所示:

on_insert_<resourcename>

第二种方法使每个回调函数都超级专业化并改进了代码隔离。还要记住,您可以将多个回调挂钩到同一个事件(因此是一元运算符。)

供参考,请参阅the docs