我想在POST和其他修改方法中使用查询参数。这可以应用于常规查询参数或由具有变量的url规则提取的参数。 但我注意到Eve专门为POST调用删除了这些参数。我可以很容易地进行必要的修改来保存它们,但是由于它们被故意丢弃,我想知道它们是否存在一些缺点。这个设计决定的原因是什么?
也许有人会问为什么有人想要使用像这样的查询参数。我想到的API在POST和DELETE调用中使用查询参数。这可能是方便的一个例子是允许用户修改调用的验证和实际行为。举一个有点人为的例子:
DELETE /resource/123
-- fails if there are dependent objects for this resource
DELETE /resource/123?cascade=true
-- allow delete to cascade to dependent objects (eg. user clicked "I am sure")
另一个例子:
POST /user?allowId=True { "id" : 123, "name" : "Bob }
-- will accept externally-defined ID as opposed to generating a new one
另一个例子:
POST /container/<foo>/resource { ... }
-- create a new resource inside of the <foo> container
我尝试使用request.args来获取变量规则,但它似乎不起作用。 ( 可以通过这种方式获取查询参数,但我也希望变量规则能够正常工作。)
*in settings.py*
DOMAIN = {
'ducks' : {
'url':'rows/<row>/ducks',
'schema': {
'name' : { 'type' : 'string' }
}
}
}
*command line*
curl -H "Content-Type: application/json" -X POST 'http://localhost:5001/rows/1/ducks' -d '{"name":"bob"}
当代码进入我的on_pre_POST钩子时,request.args为空。
如果我向上走,我会看到endpoints.collection_endpoint()
函数lookup
确实包含{'row':1}
,但它没有传递到post(response)
调用。如果有意义的话,我可以提交一个拉取请求来解决这个问题。
我发现request.view_args
提供了这些参数,而不是request.args
。这意味着两种参数都可以在flask / eve中的任何地方访问,而无需更改代码。
答案 0 :(得分:1)
由于on_pre_POST
传递了请求对象,您可以轻松实现:
def my_pre_post_callback(resource, request):
allowId = request.args.get('allowId')
...