我正在尝试使用补丁方法来提供回调,以便在它们变成有效载荷之前分别对请求和回复进行一些预处理和后处理,例如:
from eve.methods.patch import patch_internal as __patch_internal
def my_patch(resource, payload=None, **lookup):
response, last_modified, etag, status = __patch_internal(
resource, payload,
concurrency_check=True,
skip_validation=False, **lookup)
# call callback depending on resource passing response
return response, last_modified, etag, status
import eve.methods
eve.methods.patch = my_patch
我面临的问题是Eve中的大部分功能都是直接导入的。 我不得不把夏娃分开来这样做?
答案 0 :(得分:2)
你有没有看过Event Hooks?它们允许您将自定义回调函数绑定到事件和事件以及数据库操作之前和之后。回调可以改变原始查询,存储的文档或返回的有效负载。
def inject_username_lookup(resource, request, lookup):
# alter the original query
lookup["username"] = {'$exists': True}
app = Eve()
app.on_pre_GET += inject_username_lookup
app.run()
由于您可以将多个回调挂钩到同一个事件(它们将按顺序执行),因此可以实现一些非常好的关注点分离。 Database events也很强大。