从 Flask 中的 __init__ 导入

Importing from __init__ in Flask

我想从我的 __init__ 文件中导入一个 class。但是我导入不成功。这是我的目录结构

/fitBody_app
  /fitBody
    /static
    /templates
    __init__.py
    models.py
    views.py

run.py

这些都是我的 __init__.py 文件的导入:

import os

from flask import Flask
from flask_admin import Admin
from flask_admin.contrib.sqla import ModelView
from flask_sqlalchemy import SQLAlchemy
from wtforms import fields, widgets

from fitBody.views import my_app
from flask_bootstrap import Bootstrap

app = Flask(__name__)
db = SQLAlchemy(app)

这些都是我在 views.py 文件中导入的内容:

import bcrypt
from flask import flash, redirect, render_template, request, session, Blueprint, url_for
from fitBody.models import RegistrationForm
from fitBody.models import cursor, conn
from fitBody import db

my_app = Blueprint('fitBody', __name__)

<......>

当我尝试 运行 文件时,这是我的回溯:

Traceback (most recent call last):
  File "/Users/kai/github-projects/fitBody_app/run.py", line 1, in <module>
    from fitBody import app
  File "/Users/kai/github-projects/fitBody_app/fitBody/__init__.py", line 9, in <module>
    from fitBody.views import fitBody
  File "/Users/kai/github-projects/fitBody_app/fitBody/views.py", line 8, in <module>
    from fitBody import db
ImportError: cannot import name 'db'

我想既然我是从同一个文件夹中导入的,就可以像这样导入。

我该如何从 __init__.py 文件导入 db 对象?

它与从 __init__.py 文件导入没有任何关系。您的 views.py 正在从您的 __init__.py 文件导入,而 __init__.py 文件正在从您的 views.py 导入,这是一个导入周期。我不确定你的 models.py 是什么样子,但是你如何在 models.py 中初始化 db 并从 [=15= 导入 __init__.pyviews.py ]

因为 views.py 使用 db 导入语句应该在数据库定义之后。或者为了更好的设计将蓝图移动到另一个文件,并将蓝图保留在该文件中:

#__init__.py
app = Flask(__name__)
db = SQLAlchemy(app)

from fitBody.views import my_app