我和一位好友一直在阅读Flask-RESTless的文档,并说:
预处理器和后处理器函数的参数将作为关键字参数提供,因此在定义预处理器或后处理器函数时,应始终添加** kw作为最终参数。
但它没有指定我们如何使用这些关键字参数将信息传递给预处理器或后处理器。谁能告诉我们怎么做?
我们的create_api现在看起来像这样:
create_api(Foo,
methods=['GET', 'POST', 'PUT', 'DELETE'],
collection_name='p',
url_prefix='/api/v1',
primary_key='uid',
exclude_columns=['id'],
preprocessors={
'POST': [authenticate, validation_preprocessor],
'GET_SINGLE': [authenticate],
'GET_MANY': [authenticate],
'PUT_SINGLE': [authenticate, validation_preprocessor],
'PUT_MANY': [authenticate, validation_preprocessor],
'DELETE': [authenticate]
})
def validation_preprocessor(data=None, **kw):
# Do stuff
pass
我们想要做的是在validation_preprocessor中使用** kw作为我们自己的值。
答案 0 :(得分:2)
通过阅读文档,您无法将数据传递给预处理器, 预处理器,数据会传递给您。
数据的确切格式取决于具体方法:
每种请求的预处理器和后处理器都接受不同的参数。它们中的大多数应该没有返回值(更具体地说,忽略任何返回的值)....那些接受字典作为参数的预处理器和后处理器可以(并且应该)就地修改它们的参数。
你没有直接使用* kw,只是为了使你的代码与Flask-RESTLess兼容,所以如果他们决定更新API并向你的函数发送一组不同的参数,它不会打破。
在您的特定示例中,您只需编辑data
字典,因为Python变量为pass by assignment,一旦您编辑它,就会为链的其余部分编辑它。
def validation_preprocessor(data=None, **kw):
if data:
data["foobar"] = "rarr I'm a dinosaur"
我个人认为这令人困惑,而不是我希望事情如何发挥作用,但我认为他们有理由这样做。