我使用python的默认设置
'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":{“用户名”:"Alex",. } 200
发布于 2017-04-02 07:53:31
您正在将Eve的REST参数称为where (它将给定的参数转换为标准MongoDB find()查询的查询条件)与MongoDB的 JavaScript操作符(在Eve中默认情况下强烈禁止和禁用该操作符)。
不幸的是,这是Eve API中一个令人困惑的命名选择。$where操作符(如果使用)将是提供给Eve的where的查询条件的一部分。
修改示例params以使用$where查询(仅用于说明目的,因为这绝对不是推荐的或可执行的):
params = {'where': '{"$where":"this.username == \'Alex\'"}'}使用Eve的默认设置(或$where包含在MONGO_QUERY_BLACKLIST中),Eve API将返回类似于以下内容的响应:
{"_status":"ERR","_error":{“消息”:“浏览器(或代理)发送了服务器无法理解的请求。”,“代码”:400}
从黑名单中删除$where将返回匹配的_items。我用Eve 0.7.2对此进行了测试,以确定预期的行为。
发布于 2017-04-02 10:34:07
@Stennie是正确的,QUERY_MONGO_BLACKLIST引用的是实际的查询参数,而不是查找关键字本身。但是,如果您想完全禁用筛选,只需设置ALLOWED_FILTERS = []。
此外,如果不希望使用QUERY_WHERE,则可以使用where来选择另一个关键字。
# disable filters
ALLOWED_FILTERS = []
# replace the default 'where' with 'find'
QUERY_WHERE = 'find'https://stackoverflow.com/questions/43160504
复制相似问题