【发布时间】:2015-02-25 08:17:52
【问题描述】:
我正在尝试扩展我的第一个 Flask 应用程序,但不了解在多个模块中使用 pymongo db 所需的结构。例如,这是我的新结构:
run.py
app/
├── __init__.py
├── forms.py
├── static/
├── templates/
└── views/
├── __init__.py
├── bookmarklet.py
├── main.py
└── user.py
在尝试扩展它之前,我在我的单个 views.py 文件的顶部有这个:
from flask.ext.pymongo import PyMongo
mongo = PyMongo(app)
with app.app_context():
mongo.db.user.ensure_index("email", unique=True)
目标是能够在所有视图模块以及forms.py 模块中使用这个mongo 实例。我试过这两件事:
- 把上面的sn-p放到
app/__init__.py文件里,但是好像不能让其他模块可以访问。我试过这样做:app.db = mongo.db(但下游不可用) - 把上面的sn-p放到需要它的每个模块中,但是我得到的错误是有多个mongo实例具有相同的前缀。
这个初始化应该放在哪里才能让它在应用程序的任何地方都可以访问?
编辑
听起来我做得对,但还有其他事情发生。我正在发布我更完整的代码和错误。
app/__init__.py
from flask import Flask
app = Flask(__name__)
from app.views import main
app.config.update(
DEBUG = True,
SECRET_KEY = "not telling",
WTF_CSRF_ENABLED = False,
)
app.jinja_env.add_extension('pyjade.ext.jinja.PyJadeExtension')
from flask.ext.pymongo import PyMongo
mongo = PyMongo(app)
with app.app_context():
mongo.db.user.ensure_index("email", unique=True)
app/views/main.py
from app import app
from flask import render_template, redirect, request, flash, url_for
from flask.ext.jsonpify import jsonify
from app.forms import *
from app import *
print mongo
错误:
(venv)imac: me$ ./run.py
Traceback (most recent call last):
File "./run.py", line 4, in <module>
from app import app
File "/Users/me/Dropbox/development/test/app/__init__.py", line 4, in <module>
from app.views import main
File "/Users/me/Dropbox/development/test/app/views/main.py", line 9, in <module>
print mongo
NameError: name 'mongo' is not defined
【问题讨论】:
标签: python mongodb flask pymongo