gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 01:07:45 25 4
gpt4 key购买 nike

如何在使用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 和二维码,并给它一个简单的 ID,比如 001,我已经实现了生成类似二维码生成器的代码,但我没有如何在信息发布之后和保存到 MongoDB 之前添加所有这些功能。

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

能否给我一些数据示例,非常感谢。

最佳答案

on_insert事件在 POST 之后 被触发请求已经过验证和解析,文档被发送到数据库之前。您可以将回调函数 Hook 到 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> ,像这样:

# note that the signature has changed
def manipulate_inbound_documents(docs):
# no need to branch on the resource name
for doc in docs:
doc['id_field'] = '001'
doc['qr'] = 'mycqcode'

app = Eve()
# only fire the event on 'activity' endpoint
app.on_insert_activity += manipulate_inbound_documents

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

有关引用,请参阅 the docs

关于python - 如何在使用 Python eve 时添加一些自进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29530594/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com