Python Eve集成MongoDB未返回全部数据,疑settings.py配置问题?
排查Python Eve仅返回_id字段的问题
嗨,这个问题我之前帮不少开发者排查过,大概率是你的settings.py里的资源配置出了问题——毕竟Eve是个严格遵循schema的框架,默认只会返回你明确配置过的字段。下面是几个最常见的原因和对应的修复方案:
1. 资源Schema未定义要返回的字段
Eve默认开启严格模式,只有在资源的schema中明确声明的字段,才会在响应中返回。如果你的MongoDB文档里有其他字段,但settings.py里的资源配置没有包含这些字段,就只会返回默认的_id。
错误示例:
# settings.py DOMAIN = { 'your_collection_name': { 'schema': {}, # 空Schema,仅默认返回_id } }
修复方案:
在schema中列出所有需要返回的字段,或者开启allow_unknown允许返回未定义的字段:
# settings.py DOMAIN = { 'your_collection_name': { 'schema': { 'username': {'type': 'string'}, 'age': {'type': 'integer'}, # 把MongoDB文档中需要返回的字段都在这里定义 }, # 可选:如果想返回所有未在schema中定义的字段,开启这个 'allow_unknown': True } }
2. 错误设置了response_fields
如果你的资源配置里指定了response_fields,并且只包含_id,那么其他字段会被过滤掉。
错误示例:
# settings.py DOMAIN = { 'your_collection_name': { 'response_fields': ['_id'], # 强制仅返回_id 'schema': { 'username': {'type': 'string'}, 'age': {'type': 'integer'}, } } }
修复方案:
要么删除response_fields配置(默认返回所有schema中定义的字段),要么添加需要返回的字段:
# settings.py DOMAIN = { 'your_collection_name': { 'response_fields': ['_id', 'username', 'age'], 'schema': { 'username': {'type': 'string'}, 'age': {'type': 'integer'}, } } }
3. 检查资源的访问权限配置
虽然你能拿到_id,但还是可以确认下public_methods和public_item_methods是否包含GET(默认是包含的,但如果被修改过可能出问题):
# settings.py DOMAIN = { 'your_collection_name': { 'public_methods': ['GET'], # 确保GET请求被允许 'public_item_methods': ['GET'], 'schema': { # ... 字段定义 } } }
先从上面几个方向排查,基本就能解决问题啦!
内容的提问来源于stack exchange,提问作者Dzung Nguyen
相关产品推荐
相关产品推荐

