使用 Flask 和 MongoEngine 开发 Tumblelog 应用程序时出错

Posted

技术标签:

【中文标题】使用 Flask 和 MongoEngine 开发 Tumblelog 应用程序时出错【英文标题】:Error in Tumblelog Application development using Flask and MongoEngine 【发布时间】:2015-06-08 16:49:23 【问题描述】:

我正在尝试按照以下教程进行操作,但是当我运行 manage.py 时遇到了一些问题。任何帮助都可能是很大的帮助。

http://docs.mongodb.org/ecosystem/tutorial/write-a-tumblelog-application-with-flask-mongoengine/#id1

manage.py 运行输出:

 (Tumbler)afiz Tumbler $ python manage.py 
Traceback (most recent call last):
  File "manage.py", line 6, in <module>
    from tumblelog import app
  File "/home/afiz/.virtualenvs/tumblelog/__init__.py", line 18, in <module>
    register_blueprints(app)
  File "/home/afiz/.virtualenvs/tumblelog/__init__.py", line 13, in register_blueprints
    from tumblelog.views import posts
  File "/home/afiz/.virtualenvs/tumblelog/views.py", line 5, in <module>
    from tumblelog.models import Post, Comment
  File "/home/afiz/.virtualenvs/tumblelog/models.py", line 6, in <module>
    class Post(db.DynamicDocument):
  File "/home/afiz/.virtualenvs/Tumbler/local/lib/python2.7/site-packages/mongoengine/base/metaclasses.py", line 361, in __new__
    meta['index_specs'] = new_class._build_index_specs(meta['indexes'])
  File "/home/afiz/.virtualenvs/Tumbler/local/lib/python2.7/site-packages/mongoengine/base/document.py", line 722, in _build_index_specs
    unique_indices = cls._unique_with_indexes()
  File "/home/afiz/.virtualenvs/Tumbler/local/lib/python2.7/site-packages/mongoengine/base/document.py", line 861, in _unique_with_indexes
    field.document_type != cls):
  File "/home/afiz/.virtualenvs/Tumbler/local/lib/python2.7/site-packages/mongoengine/fields.py", line 563, in document_type
    self.document_type_obj = get_document(self.document_type_obj)
  File "/home/afiz/.virtualenvs/Tumbler/local/lib/python2.7/site-packages/mongoengine/base/common.py", line 25, in get_document
    """.strip() % name)
mongoengine.errors.NotRegistered: `Comment` has not been registered in the document registry.
            Importing the document class automatically registers it, has it
            been imported?

manage.py 文件:

    #set the path
import os, sys
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))

from flask.ext.script import Manager, Server
from tumblelog import app

manager = Manager(app)

# Turn on debugger by default and reloader
manager.add_command("runserver", Server(
    use_debugger = True,
    use_reloader = True,
    host = '0.0.0.0')
)

if __name__ == "__main__":
    manager.run()

【问题讨论】:

你的模型是什么样的? PIP 冻结输出: (Tumbler)afiz .virtualenvs $ pip freeze Flask==0.10.1 Flask-Script==2.0.5 Flask-WTF==0.8.4 Jinja2==2.7 .3 MarkupSafe==0.23 WTForms==2.0.2 Werkzeug==0.10.4 argparse==1.2.1 flask-mongoengine==0.7.1 itsdangerous==0.24 mongoengine==0.9.0 pymongo==2.8 wsgiref==0.1 .2 (Tumbler)afiz .virtualenvs $ cd Tumbler/ (Tumbler)afiz Tumbler $ ls bin include <b>init</b>.py lib local manage.py requirements.txt (Tumbler)afiz Tumbler $ @stillfool 的回答对我有用。你呢?你可能应该接受它,用一些点勾结一个朋友。 【参考方案1】:

我遇到了和你现在一样的问题。在我刚刚写的models.py文件中

类注释(db.EmbeddedDocument):

先是内容再添加

类帖子(db.Document):

然后是内容。换句话说,我先写了 Comment 类,然后写了 Post 类,问题就解决了 ;) :) 干杯!!

【讨论】:

如果在Comment 之前定义Post,则必须确保将名称作为字符串传递(即'Comment')。【参考方案2】:

在 Post 内部,EmbeddedDocumentField 赋值给变量时,需要预先注册。因此,请务必在使用之前注册此类字段,即评论。

【讨论】:

以上是关于使用 Flask 和 MongoEngine 开发 Tumblelog 应用程序时出错的主要内容,如果未能解决你的问题,请参考以下文章

使用 Flask 和 MongoEngine 跟踪 Tumblelog 应用程序时出错

Flask,Pymongo和Mongoengine - ImportError:无法导入名称'app'

Flask mongoengine 分页

pip install flask-mongoengine报错

带有 mongoengine 的 Flask 应用程序的 Elastic Beanstalk WSGI 部署的“您尚未定义默认连接”

Flask | Flask基础 - Flask基础项目设置