我正在写一个Flask应用程序,并在main.py中实例化一个mongo数据库。
我有一个名为user.py
的子模块,它包含类User
。 main.py
获取登录凭据并将其发送给处理其余部分的用户类。
如何将我的mongo实例干净地传递给User类?我在config.py
文件中尝试过静态变量但它们不起作用,因为user.py
尝试使用它们时变量始终为None。
现在我正在尝试传入mongo作为参数,但考虑到会有很多模块,这似乎是一种肮脏的方式。这是我的代码;
# Setup app and database
app = Flask(__name__)
app.config['MONGO_URI'] = 'mongodb://'
mongo = PyMongo(app)
答案 0 :(得分:0)
您可以将mongo
直接导入user.py
模块。
要避免循环导入错误,您只需将导入移动到文件的底部即可。只要您在定义app之后将User导入main,它就应该解析循环导入:
from .main import mongo
# class User():
# ... Your Code
from flask import Flask
from flask_pymongo import PyMongo
app = Flask(__name__)
mongo = PyMongo(app)
from .user import User
将进口移到底部通常不是一个好主意,但在Flask中很常见。以下是官方烧瓶文档中类似情况的示例:
# app.py
from flask import Flask
app = Flask(__name__)
import app.views
# views.py
from app import app
@app.route('/')
def index():
return 'Hello World!'
http://flask-.readthedocs.io/en/0.6/patterns/packages/#simple-packages
在文件[...]
的底部进行导入每个Python程序员都讨厌它们,但我们只添加了一些:循环导入(当两个模块相互依赖时。在这种情况下,views.py依赖于 init .py)。请注意,这一般是一个坏主意,但这里实际上很好。这样做的原因是我们实际上并没有使用 init .py中的视图,只是确保导入模块,我们正在文件的底部进行操作。