gpt4 book ai didi

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

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

我想在 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 钩子(Hook)时,request.args 为空。如果我走上堆栈,我会看到在 endpoints.collection_endpoint() 函数 lookup 中确实包含 {'row':1} 但它是未传递到 post(response) 调用中。如果有意义,我可以提交拉取请求来解决此问题。

已编辑 2

我发现这些参数在 request.view_args 中可用,而不是在 request.args 中。这意味着无需更改代码即可在 flask/eve 中的任何位置访问这两种参数。

最佳答案

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

def my_pre_post_callback(resource, request):
allowId = request.args.get('allowId')
...

关于python - python-eve 在 POST 操作中删除查找参数的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26770603/

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