Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 烧瓶应用程序循环依赖项_Python_Flask_Model_Flask Restful - Fatal编程技术网

Python 烧瓶应用程序循环依赖项

Python 烧瓶应用程序循环依赖项,python,flask,model,flask-restful,Python,Flask,Model,Flask Restful,我正在开发一个Flask应用程序,我不确定为什么会出现此错误: File "app.py", line 17, in <module> from endpoints.users.resource import UserResource File "{basedir}/endpoints/users/resource.py", line 4, in <module> from .model import Use

我正在开发一个Flask应用程序,我不确定为什么会出现此错误:

  File "app.py", line 17, in <module>
    from endpoints.users.resource import UserResource
  File "{basedir}/endpoints/users/resource.py", line 4, in <module>
    from .model import User
  File "{basedir}/endpoints/users/model.py", line 1, in <module>
    from app import db
  File "{basedir}/app.py", line 17, in <module>
    from endpoints.users.resource import UserResource
ImportError: cannot import name 'UserResource' from 'endpoints.users.resource' ({basedir}/endpoints/users/resource.py)
端点/用户/model.py:

from app import db

class User(db.Model):
    # info about the class, requires db
端点/users/resource.py:

from flask_restful import Resource
from .model import User
from app import db

class UserResource(Resource):
    def get(self, username=None):
        # get request, requires db and User
在app.py中,由于我是在创建db后从endpoints.users.resource导入的,所以这不应该绕过循环依赖吗


另外,我可以使用
flask run
运行这个程序,但是当我尝试使用
python app.py
时,它会给出上面的错误。为什么这些会产生不同的结果?

那么从endpoints.users.resource导入UserResource行python尝试从app import db行导入
app.py
,这会导致
app
引用自身,这一点都不好

解决Flask中循环导入错误的一个解决方法是使用大多数Flask应用程序中存在的
init_app
函数。因此,只需创建
数据库
文件,如下所示:

.
├── app.py
└── database.py/
└── endpoints/
        ├── __init__.py
        └── users/
            ├── __init__.py
            ├── model.py
            └── resource.py

database.py

从flask\u sqlalchemy导入sqlalchemy
db=SQLAlchemy()
app.py

从烧瓶导入烧瓶
从restful导入Api
从数据库导入数据库
从endpoints.users.resource导入UserResource
app=烧瓶(名称)
app.config.from_对象(config)
db.init_应用程序(应用程序)
api=api(应用程序)
api.prefix='/api'
api.add_资源(UserResource,“/users”)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
应用程序运行(host=“0.0.0.0”)
端点/用户/model.py:

from app import db

class User(db.Model):
    # info about the class, requires db
从数据库导入数据库
类用户(db.Model):
#关于类的信息,需要数据库
端点/users/resource.py:

from flask_restful import Resource
from .model import User
from app import db

class UserResource(Resource):
    def get(self, username=None):
        # get request, requires db and User
来自flask\u restful导入资源
从endpoints.users.model导入用户
从数据库导入数据库
类用户资源(资源):
def get(self,username=None):
#获取请求,需要数据库和用户
请注意,我重写了从相关文件导入的内容,因此不要忘记添加
\uuuu init\uuuuu.py
文件
您的结构如下所示:

.
├── app.py
└── database.py/
└── endpoints/
        ├── __init__.py
        └── users/
            ├── __init__.py
            ├── model.py
            └── resource.py


谢谢你的帮助!
\uuuu init\uuuuu.py
文件用于什么?@user11799它们用于帮助python索引模块。因此,当您启动
app.py
时,python会在每个子目录中递归地运行并检查这些文件,并且您只能导入模块,其中包含
\uuuu init\uuuu.py
。最好的做法是在每个子目录中都包含
\uuuuu init\uuuuuu.py
文件(但不在根目录中)。文件可能为空。@user11799如果您没有这些文件,则导入的唯一方法是相对导入(就像您使用.model import User
中的
),但此方法的缺点是无法从父目录导入。在我的示例中,我们想要导入
数据库
文件,该文件比
模型