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'
我正在使用 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'