我的文件夹结构看起来像- Structure
我试图以模块化的方式编写代码,但遇到循环导入。 我正在烧瓶中研究ORM模型和基本的登录/注册用户方案。
我的代码如下-
*app/__init__.py*
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = "..."
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
db.create_all()
from app import routes
def get_session():
return db.session()
crud / crud_user.py
from app.model import User
from app import get_session
from flask_sqlalchemy import SQLAlchemy
session = get_session()
def save_user_detail(user: User):
# make use of session here
pass
错误-
$ python runserver.py
Traceback (most recent call last):
File "runserver.py", line 1, in <module>
from app import app
File "C:\Users\admin\Documents\Projects\Modular\server-side\app\__init__.py", line 13, in <module>
from app import routes
File "C:\Users\admin\Documents\Projects\Modular\server-side\app\routes.py", line 4, in <module>
from crud.crud_user import get_user, save_user_detail
File "C:\Users\admin\Documents\Projects\Modular\server-side\crud\crud_user.py", line 2, in <module>
from app import get_session
ImportError: cannot import name 'get_session' from partially initialized module 'app' (most likely due to a circular import)
答案 0 :(得分:0)
我认为from app import routes
中的app/__init__.py
行是问题所在。因为在app/__init__.py
文件初始化期间,您实际上是从该routes
文件本身导入__init__
的,所以
但是,更一般地说,我相信创建Flask应用并将其他全局对象放入__init__.py
文件中是非常规的。通常,__init__.py
文件用于为包中的模块提供备用名称,而不用于保存全局对象。
更好的做法是将这些内容存储在名为app.py
的模块中,这样就不会在每次调用from app import foo
时将它们导入