我想从 __init__.py
导入 db
int model.py
文件,但无法导入,出现错误说:
Traceback (most recent call last):
File "/home/rohit/Desktop/flask_app/run.py", line 1, in <module>
from bytewar import create_app
File "/home/rohit/Desktop/flask_app/bytewar/__init__.py", line 5, in <module>
from bytewar.user.views import user_blueprint
File "/home/rohit/Desktop/flask_app/bytewar/user/views.py", line 9, in <module>
from bytewar.model import Login_form, Login, Post, Contacts, Signup_form, Contacts
File "/home/rohit/Desktop/flask_app/bytewar/model.py", line 5, in <module>
from bytewar import db
ImportError: cannot import name 'db'
我的应用程序树:
___ run.py # <<------- ImportError in this file.
___ bytewar/
|__ __init__.py
|__ config.py
|__ model.py
|__ user/
| |__ __init__.py
| |__ views.py
| |__ static/
| | |__ img/
| | |__ ....
| |__ template/
| |__ index.html
| |__ about.html
|
|__ admin/
|__ __init__.py
|__ views.py
|__ template/
|__ index.html
|__ about.html
__init__.py:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_bootstrap import Bootstrap
from flask_login import LoginManager
from bytewar.user.views import user_blueprint
from bytewar.admin.views import admin_blueprint
db = SQLAlchemy()
def create_app():
app = Flask('bytewar')
app = Flask(__name__.split('.')[0])
app.config.from_pyfile('config.py')
app.config['DEBUG'] = True
app.register_blueprint(user_blueprint)
app.register_blueprint(admin_blueprint)
login_manager = LoginManager()
bootstrap = Bootstrap(app)
db.init_app(app)
login_manager.init_app(app)
login_manager.session_protection = 'strong'
return app
在这里您可以看到我已经 db.init_app(app)
但仍然遇到 ImportError
。
在 bytewar.user/
和 bytewar.admin/
中添加 __init__.py
文件后(在 views 旁边) .py
),我在 run.py
中遇到错误:
Traceback (most recent call last):
File "/home/rohit/Desktop/flask_app/run.py", line 1, in <module>
from bytewar import app
File "/home/rohit/Desktop/flask_app/bytewar/__init__.py", line 5, in <module>
from bytewar.user.views import user_blueprint
File "/home/rohit/Desktop/flask_app/bytewar/user/views.py", line 9, in <module>
from bytewar.model import Login_form, Login, Post, Contacts, Signup_form, Contacts
File "/home/rohit/Desktop/flask_app/bytewar/model.py", line 5, in <module>
from run import db
File "/home/rohit/Desktop/flask_app/run.py", line 1, in <module>
from bytewar import app
ImportError: cannot import name 'app'
run.py:
from bytewar import app
if __name__ == "__main__":
app.run()
我的bytewar/user/__init__.py
,因为它是bytewar/admin/__int__.py
:
from flask import Blueprint
user_blueprint = Blueprint(
'user', __name__,
static_folder='static',
template_folder='template',
)
为什么会发生这种情况?
最佳答案
在bytewar.user.views
中,您从__init__.py
导入数据库。然而,这仅在导入下方定义了几行。因此,在导入完成时,数据库尚不存在,错误证实了这一点。当您查看应用程序工厂 1 的示例代码时您会看到 app
变量仅在定义后才使用,您的代码也应该这样做。将导入移至底部即可完成设置。
顺便说一句:为什么要在工厂中创建您的应用
并立即覆盖它?将第二个创作排除在外。
关于python - 如何从 __init__.py 导入应用程序以及为什么会收到此错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59809861/