python-eve在POST操作中删除查找参数的原因是什么?

时间:2014-11-06 02:07:59

标签: python eve

我想在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)调用。如果有意义的话,我可以提交一个拉取请求来解决这个问题。

已编辑2

我发现request.view_args提供了这些参数,而不是request.args。这意味着两种参数都可以在flask / eve中的任何地方访问,而无需更改代码。

1 个答案:

答案 0 :(得分:1)

由于on_pre_POST传递了请求对象,您可以轻松实现:

def my_pre_post_callback(resource, request):
    allowId = request.args.get('allowId')
    ...
相关问题