我正在使用 Flask-Security 1.7.4 和 Flask 0.10.1。
如果数据库方案存储在 python 文件中,我运行我的网站没有问题app.py
:
from flask.ext.security import RoleMixin, UserMixin, SQLAlchemyUserDatastore, Security
from flask.ext.sqlalchemy import SQLAlchemy
app = Flask(__name__)
#Create database connection object
db = SQLAlchemy(app)
#Define models
roles_users = db.Table('roles_users',
db.Column('user_id', db.Integer(), db.ForeignKey('user.id')),
db.Column('role_id', db.Integer(), db.ForeignKey('role.id')))
class Role(db.Model, RoleMixin):
id = db.Column(db.Integer(), primary_key=True)
name = db.Column(db.String(80), unique=True)
description = db.Column(db.String(255))
class User(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(255), unique=True)
companyid = db.Column(db.String(255), unique=True)
lastname = db.Column(db.String(255))
firstname = db.Column(db.String(255))
password = db.Column(db.String(255))
active = db.Column(db.Boolean())
confirmed_at = db.Column(db.DateTime())
roles = db.relationship('Role', secondary=roles_users,
backref=db.backref('users', lazy='dynamic'))
# Setup Flask-Security
user_datastore = SQLAlchemyUserDatastore(db, User, Role)
security = Security(app, user_datastore)
但是我想分离更多我的代码,这样我就可以拥有:
app_folder
|__ app.py # Main file for the app
|__ security.py # File that contain the database for the login/roles
所以我尝试了:
在security.py
:
db = SQLAlchemy()
# Define models
roles_users = db.Table(
'roles_users',
db.Column('user_id', db.Integer(), db.ForeignKey('user.id')),
db.Column('role_id', db.Integer(), db.ForeignKey('role.id'))
)
class Role(db.Model, RoleMixin):
id = db.Column(db.Integer(), primary_key=True)
name = db.Column(db.String(80), unique=True)
description = db.Column(db.String(255))
class User(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(255), unique=True)
companyid = db.Column(db.String(255), unique=True)
lastname = db.Column(db.String(255))
firstname = db.Column(db.String(255))
password = db.Column(db.String(255))
active = db.Column(db.Boolean())
confirmed_at = db.Column(db.DateTime())
roles = db.relationship('Role', secondary=roles_users, backref=db.backref('users', lazy='dynamic'))
user_datastore = SQLAlchemyUserDatastore(db, User, Role)
并在app.py
:
from flask.ext.security import RoleMixin, UserMixin, SQLAlchemyUserDatastore, Security
from flask.ext.sqlalchemy import SQLAlchemy
from security import db, user_datastore
app = Flask(__name__)
#Initiate the database connection object
db.init_app(app)
# Setup Flask-Security
security = Security(app, user_datastore)
我收到以下错误:
File "C:\Work\pythonVirtualEnv\env02\lib\site-packages\sqlalchemy\engine\default.py", line 436, in do_execute
cursor.execute(statement, parameters)
OperationalError: (OperationalError) no such table: users u'SELECT users.user_id AS users_user_id, users.username AS users_username, users.password AS users_password, users.email AS users_email, users.registered_on AS users_registered_on \nFROM users \nWHERE users.password = ? AND users.email = ?\n LIMIT ? OFFSET ?' (u'test', u'demo@demo.com', 1, 0)
问题是,如果我保留所有代码,app.py
它就可以完美运行。当然数据库要存在。
你能告诉我我做错了什么吗?
谢谢 :)