我在使用Flask设置将form
数据发送到MongoDB时遇到了麻烦。表单如下所示: https://jsfiddle.net/8gqLtv7e
在客户端,我看到没有错误。但是当我提交表单时,我收到500内部服务器错误,而且我很难找到解决方案。问题是我的views.py
文件中的最后一行:
@app.route('/recordReport', methods=['POST'])
def recordReport():
homeReportsCollection = db["reports"]
address=request.form.get['address']
rgbImage=request.form.get['rgb']
homeReportsCollection.insert({'address':address, 'rgb':rgbImage})
因为如果我用return json.dumps({'status':'OK', 'address':'address', 'rgb':'rgbImage'})
替换它,我可以在浏览器中看到正确的数据。我只是无法将它发送到MongoDB中的集合。
答案 0 :(得分:1)
这个答案是评论的摘要(找到解决方案的地方)。
在插入之前,您是否尝试将
address
和rgbImage
类型转换为String
?
类型失效是数据库操作中许多常见错误的根源。
2013年,Mongo曾经出现过一个错误。数据将被插入到集合中。但是Mongo不会返回正确的状态响应。这导致服务器进入
500
。您是否尝试过验证数据是否确实已插入集合中?另外以
debug=True
模式运行烧瓶应用程序。这可能会提供额外的数据。
Flask具有非常好的调试回溯报告支持。这通常是一个好主意。事实上,这应该是遇到错误时要做的第一件事。
所以这很奇怪,我打开
debug=True
并收到以下错误:ValueError: View function did not return a response.
但实际上数据确实通过homeReportsCollection.insert({'address':address, 'rgb':rgbImage})
行发送到了数据库。我在我的收藏中看到了它。我该如何修复错误?因为用户被重定向到/recordReport
。
因此数据确实插入了集合中。它可能只是一个Flask问题。追溯说明了一切。 Flask要求视图方法返回一些内容。
尝试在函数
recordReport()
中返回一些内容。回报你想要的任何东西它可能是OK
消息。它可能是您刚刚插入集合的文档的_id
。 只是不要返回None
。试试这个。
此行为记录在此SO question。
中是的,我返回了一个HTML模板,现在没有错误。
这确实是解决方案。从flask视图方法返回None
以外的内容。这也验证了提问者在问题中观察到的行为:
因为如果我用
return json.dumps({'status':'OK', 'address':'address', 'rgb':'rgbImage'})
替换它,我可以在浏览器中看到正确的数据。