python - 我可以避免在 Flask 和 SQLAlchemy 中循环导入吗

标签 python flask flask-sqlalchemy

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/

相关文章:

python - 为什么 pygame 键码是特定于操作系统的?

python - 使用留一交叉验证进行过采样

python - sqlalchemy in_ 子句错误

python - 如何在 2 个不同的 app.route 中使用 Flask Flash 消息

python - 使用 ID 而不是对象填充 SQLAlchemy 多对多关系

python - 最小化加载多对多关系的性能问题

python - 导入 shared_randomstreams.RandomStreams 时无法从 Google colab 上的 Theano 导入 local_bitwidth

python - 当数据帧包含混合数据类型时,Pyarrow from_pandas 会使解释器崩溃

python - 如何跟踪 Flask 中 route 每个函数所花费的时间?

python - 为什么我得到 "TypeError: id() takes exactly one argument (0 given)"?