MONGO_QUERY_BLACKLIST 无效

MONGO_QUERY_BLACKLIST doesn't work

我正在使用 python-eve 的默认设置,其中

'MONGO_QUERY_BLACKLIST': ['$where', '$regex']

但看来我仍然可以在对 Eve 的查询中使用 'where' 参数。

import requests

params = {'where': '{"username":"Alex"}'}
response = requests.get('http://localhost/users', params)
print response.content
print response.status_code

{"_items": [{"username": "Alex", ... }], ...}

200

您将 Eve 的 REST API 参数合并为 where(它将给定参数转换为标准 MongoDB find() query) with MongoDB's $where JavaScript 运算符的查询条件(强烈建议在 Eve 中默认禁用其使用)。

不幸的是,这是 Eve API 中令人困惑的命名选择。 $where 运算符(如果使用)将成为提供给 Eve 的 where.

的查询条件的一部分

修改您的示例参数以使用 $where 查询(仅用于说明目的,因为这绝对不值得推荐或性能不佳):

params = {'where': '{"$where":"this.username == \'Alex\'"}'}

使用 Eve 的默认设置(或 MONGO_QUERY_BLACKLIST 中包含的 $where),Eve API 将 return 类似于以下内容的响应:

{"_status": "ERR", "_error": {"message": "The browser (or proxy) sent a request that this server could not understand.", "code": 400}}

从黑名单中删除 $where 将 return 匹配 _items。我针对 Eve 0.7.2 进行了测试,以确认预期的行为。

@Stennie 是正确的,QUERY_MONGO_BLACKLIST 指的是实际查询参数,而不是查找关键字本身。但是,如果您想完全禁用过滤,只需设置 ALLOWED_FILTERS = []

此外,如果您不想where:

,您可以使用QUERY_WHERE选择另一个关键字
# disable filters
ALLOWED_FILTERS = []
# replace the default 'where' with 'find'
QUERY_WHERE = 'find'