我正在关注本教程:getting started with flask-login。
但是我陷入第5步,我开始使用SQLAlchemy。我认为这个问题可能是循环导入,基于我所读过的内容,但我仍然是Python编码的新手。这个网络应用程序是我在空闲时间做的一个小项目。
所以我想我的整体问题是,这是循环导入,如果不是,有人看到我在这里做错了吗?我也使用Python 2.7使用virtualenv运行它。
文件结构:
-noteapp
-noteapp
-db
-forms
-static
-templates
-views
__init__.py
app.py
models.py
这是我的app.py文件
from flask import Flask
from flask_login import LoginManager
from noteapp.models import db
from noteapp.views.index import bp as index_bp
from noteapp.views.createnote import bp as createnote_bp
from noteapp.views.signup import bp as signup_bp
def init_db():
db.init_app(app)
db.app = app
db.create_all()
app = Flask(__name__)
app.secret_key = 'removed for reasons'
app.config['SQLALCHEMY_DATABASE_URI'] = 'removed for reasons'
db = SQLAlchemy(app)
login_manager = LoginManager(app)
login_manager.init_app(app)
app.register_blueprint(index_bp)
app.register_blueprint(createnote_bp)
app.register_blueprint(signup_bp)
if __name__ == '__main__':
app.init_db()
app.run(debug=True)
这是我的models.py文件:
from noteapp.app import app
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy(app)
class User(db.Model):
email = db.Column(db.String(80), primary_key=True, unique=True)
password = db.Column(db.String(80))
def __init__(self, email, password):
self.email = email
self.password = password
def __repr__(self):
return '<User %r>' % self.email
答案 0 :(得分:0)
你是对的,你有一个圆圈导入问题。
在app.py
导入from noteapp.models import db
,
并在models.py
导入from noteapp.app import app
快速修复可能是:
在models.py
使用db = SQLAlchemy()
时没有app
在app.py
模块,从models.py导入数据库并执行db.init_app(app)
还会从您的app.py
中删除db = SQLAlchemy(app)
你的app.py应该是这样的..
from noteapp.models import db
...
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'removed for reasons'
...
def init_db():
db.init_app(app)
db.app = app
db.create_all()
...
if __name__ == '__main__':
app.init_db()
app.run(debug=True)
models.py应如下所示:
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class User(db.Model):
email = db.Column(db.String(80), primary_key=True, unique=True)
password = db.Column(db.String(80))
def __init__(self, email, password):
self.email = email
self.password = password
def __repr__(self):
return '<User %r>' % self.email