app/init.py:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__ name __)
db = SQLAlchemy(app)
from app import views, models
app/models.py:
from app import db # I want to avoid this everywhere
我真的不喜欢我的子模块依赖于它们的父模块。也可以避免全局包变量吗?我想要一个更面向对象的解决方案。
我认为应用程序的另一种选择是使用蓝图,但随后我失去了路由装饰器。使用 SQLAlchemy 的 db 也不能这样做(或者可以吗?)。
最佳答案
看看这个项目:https://github.com/sloria/cookiecutter-flask
这是以正确方式做事的一个很好的例子。使用了许多很棒的 Flask 功能:蓝图,application factories等等。
Here是他们如何注册扩展,例如 SQLAlchemy 数据库:
# app/extensions.py
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
...
# app/app.py
from app.extensions import db
def create_app(config_object=ProdConfig):
app = Flask(__name__.split('.')[0])
app.config.from_object(config_object)
register_extensions(app)
...
def register_extensions(app):
db.init_app(app)
...
关于python - 我可以避免在 Flask 和 SQLAlchemy 中循环导入吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42909816/