使用Flask将表单数据发送到MongoDB

时间:2015-12-16 20:25:41

标签: python mongodb flask pymongo

我在使用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中的集合。

1 个答案:

答案 0 :(得分:1)

这个答案是评论的摘要(找到解决方案的地方)。

  

在插入之前,您是否尝试将addressrgbImage类型转换为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模板,现在没有错误。

这确实是解决方案。从视图方法返回None以外的内容。这也验证了提问者在问题中观察到的行为:

  

因为如果我用return json.dumps({'status':'OK', 'address':'address', 'rgb':'rgbImage'})替换它,我可以在浏览器中看到正确的数据。