pymongo与烧瓶

时间:2012-04-26 19:48:33

标签: flask pymongo

我想回复我的帖子,但我得到了

  

TypeError:'Cursor'对象不可调用。

我该如何纠正?这是我的代码:

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)

4 个答案:

答案 0 :(得分:11)

find()返回一个Cursor对象,您必须迭代该对象才能访问查询返回的文档。如:

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

答案 1 :(得分:6)

当您从Flask处理程序返回某些内容时,它必须是以下类型之一:

当你返回PyMongo Cursor对象时,Flask发现它不是flask.Response的实例(实际上是flask.Flask.response_class)而不是元组,所以它假设它必须是WSGI对象和尝试调用它(因此错误)。

最佳解决方案是使用flask.jsonfiy返回JSON响应,或使用create a template呈现帖子并使用render_template返回相应的响应。

答案 2 :(得分:0)

以上答案都是正确的。 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 %}

答案 3 :(得分:0)

使用:

from flask_pymongo import Pymongo

而不是:

from flask.ext.pymongo import PyMongo
相关问题