backend
├── erp
│ ├── blueprint_create_order_and_add_products
│ │ ├── __init__.py
│ │ └── resources
│ │ ├── create_order.py
│ │ ├── __init__.py
│ ├── blueprint_general_query
│ │ ├── __init__.py
│ │ └── resources
│ │ ├── general_query.py
│ │ └── __init__.py
│ ├── common
│ │ ├── __init__.py
│ │ └── models
│ │ ├── brand.py
│ │ ├── productwithspecs.py
│ ├── database_collection
│ │ ├── finance.db
│ │ ├── orders.db
│ │ └── vendors.db
│ └── __init__.py
├── __init__.py
└── run.py
上面是我的应用程序结构,其中的models文件夹具有db类,问题在于brand模块中的类涉及(通过关系)并在productwithspecs模块中导入了该类,并且有很多相关的db类。如何在不循环导入的情况下将它们导入烧瓶的CRUD资源中。
app.py的结构为:
from erp import app
if __name__ == '__main__':
app.run(debug=True)
erp / ini .py的代码是:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_marshmallow import Marshmallow
app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:////tmp/test.db"
db = SQLAlchemy(app)
ma = Marshmallow(app)
from erp.blueprint_create_order_and_add_products import bp as bp1 # api_createorders_addproducts
# REGISTER blueprint apis to app
app.register_blueprint(bp1)
请让我知道如何避免循环导入,因为我将需要将db类导入到蓝图的资源文件夹中,例如create_order模块等。
您应该使用Application Factory App。您可以在这里找到官方推荐,这是一个很好的教程。
重构后,erp / __ init__.py应该类似于:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_marshmallow import Marshmallow
app = Flask(__name__)
db = SQLAlchemy(app)
ma = Marshmallow(app)
def create_app():
db.init_app(app)
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:////tmp/test.db"
ma.init_app(app)
with app.app_context():
# Include your routes here
app.register_blueprint(erp.blueprint_create_order_and_add_products.bp)
return app
您的app.py:
from erp import create_app
app = create_app()
if __name__ == '__main__':
app.run(debug=True)
从所有其他模块中,您可以像这样导入:
from erp import app, db
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句