Flask 带烧瓶的pymongo

Flask 带烧瓶的pymongo,flask,pymongo,Flask,Pymongo,我试图回复我的帖子,但是我得到了 TypeError:“游标”对象不可调用 我怎样才能纠正这个问题?这是我的密码: from flask import Flask from flask.ext.pymongo import PyMongo app = Flask(__name__) mongo = PyMongo(app) from pymongo import Connection connection = Connection() db = connection.te

我试图回复我的帖子,但是我得到了

TypeError:“游标”对象不可调用

我怎样才能纠正这个问题?这是我的密码:

from flask import Flask  
from flask.ext.pymongo import PyMongo  
app = Flask(__name__)  
mongo = PyMongo(app)  
from pymongo import Connection  
connection = Connection()  
db = connection.test_database  
collection = db.test_collection  

@app.route('/')  
def home_page():  
   post = {"author":"mike","text":"jiii"}  
   posts = db.posts  
   posts.insert(post)  
   return posts.find()

if __name__=='__main__':  
   app.run(debug=True)
find()返回一个对象,您必须遍历该对象才能访问查询返回的文档。例如:

for post in posts.find():
    # do something with post

当您从烧瓶处理器返回物品时,必须是以下类型之一:

  • 物体(或物体)。使用Flask将返回一个响应对象
  • 表单中的元组
  • WSGI可调用(一个函数或可调用对象,它接受两个参数并返回一个iterable)
当您返回PyMongo
游标
对象时,Flask看到它不是的实例(实际上是),也不是元组,因此它假定它必须是WSGI对象并尝试调用它(因此出现错误)


最好的解决方案是使用返回JSON响应或呈现帖子并使用返回适当的响应。

以上答案都是正确的。Flask视图将返回某种HTTP响应。因此,您需要处理数据并做出响应,可能需要使用Flask的实用函数。另外,
find()
方法返回一个游标,您需要在某个点上迭代该游标

您只需更改视图的最后一行:

@app.route('/')  
def home_page():  
   post = {"author":"mike","text":"jiii"}  
   posts = db.posts  
   posts.insert(post)  
   return render_template(posts.find(), "index.html")
并提供包含以下内容的
index.html

{% for post in posts %}
<h2>Post by {{ post.author}}</h2>
<p>{{ post.text }}</p>
{% endfor %}
{%for posts in posts%}
由{{Post.author}发布
{{post.text}

{%endfor%}
使用:

from flask_pymongo import Pymongo
而不是:

from flask.ext.pymongo import PyMongo