Maison > Questions et réponses > le corps du texte
在Flask框架中同时使用蓝图与Flask_SQLAlchemy
遇到了循环导入的问题。
目录结构如下:
.
├── jade_ims
│ ├── __init__.py
│ ├── models.py
│ └── views
│ ├── home.py
│ ├── __init__.py
│ └── install.py
└── run.py
跟代码无关的部分均已去除,run.py
只是单纯调用app.run()
jade_ims
目录下的__init__.py
文件的导入部分如下:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from jade_ims.views.home import home
from jade_ims.views.install import install
models.py
的导入部分如下:
from jade_ims import db
views
目录下的install.py
导入部分如下:
from flask import Blueprint, render_template, g
from jade_ims.models import User
报错提示如下:
Traceback (most recent call last):
File "/mnt/Data/Code/jade-ims/run.py", line 1, in <module>
from jade_ims import app
File "/mnt/Data/Code/jade-ims/jade_ims/__init__.py", line 9, in <module>
from jade_ims.views.install import install
File "/mnt/Data/Code/jade-ims/jade_ims/views/install.py", line 2, in <module>
from jade_ims.models import User
File "/mnt/Data/Code/jade-ims/jade_ims/models.py", line 1, in <module>
from jade_ims import db
ImportError: cannot import name 'db'
我的需求时想要在视图中直接操作db
进行select
,insert
等操作。
全部源码可以在这里找到: https://github.com/Xuanwo/jade-ims
请问是我什么地方搞错了吗?谢谢大家。
黄舟2017-04-17 17:53:43
Je viens d'apprendre le flacon, donc je veux juste en parler.
install.py
from jade_ims import app
C'est quoi ce bordel ? Probablement la première erreur
models.py
from jade_ims import db
Cela devrait être la deuxième erreur. L'instanciation de base de données doit être placée ici. Si vous mettez init, init doit d'abord enregistrer le plan de vue. La vue doit à nouveau importer la classe de base de données. >
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
__init__.pyVous devriez utiliser des fonctions d'usine. Un tas d'instanciations est trop moche
from flask import Flask
from werkzeug.utils import import_string
from config import config
from models import db
bps = ['jade_ims.views.home:home',
'jade_ims.views.install:install'
]
def create_app():
app = Flask(__name__)
app.config.from_object('config')
db.init_app(app)
for path in bps:
bp = import_string(path)
app.register_blueprint(bp)
return app