我正在将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'[email protected]', 1, 0)
问题是,如果我将所有代码都保留在app.py
中,那么它将完美无缺。
当然数据库也存在。
你能告诉我我做错了吗?
谢谢 :)
参考方案
您应该使用其他结构(和建议的结构):
proj_folder
- run.py
- config.py
|__ app # Main folder for the app
|__ __init__.py
|__ models.py
|__ security.py
|__ views.py
在模型上,您可以保留应用模型
在安全性上,您保留安全模型
在视图上,您可以创建视图并公开网址
然后在init.py上
import logging
from flask import Flask
from flask.ext.appbuilder import SQLA
from flask.ext.appbuilder import AppBuilder
from sqlalchemy import SQLAlchemy
logging.basicConfig(format='%(asctime)s:%(levelname)s:%(name)s:%(message)s')
logging.getLogger().setLevel(logging.DEBUG)
app = Flask(__name__)
app.config.from_object('config')
db = SQLAlchemy(app)
from app import models, security, views
在run.py
from app import app
app.run(host='0.0.0.0', port=8080, debug=True)
希望这可以帮助
看看https://github.com/dpgaspar/Flask-AppBuilder-Skeleton
Flask Cors无法运作 - python我正在尝试在Flask应用程序中启用CORS,但无论我把来源如何,似乎总是可以从浏览器访问URL。我不知道我做错了什么。这是我的代码from flask import Flask, jsonify from flask_cors import CORS app = Flask(__name__) CORS(app, resources={r'/*&…
flask:异常后停止服务器 - python我想在发生未处理的异常时立即停止我的Flask服务器。这是一个例子:from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): 1/0 # argh, exception return 'Hello World!' i…
WTForms Flask(wtf_flask)验证程序如何为RadioField包括“必需”属性 - python我基本上在寻找的是WTForms的InputRequired()的RadioField等效验证器。我的意思是,当您尝试提交表单而不在具有InputRequired()验证器的StringField字段中输入任何文本时,用户会在文本字段上方看到提示,提示是"Please fill out this field"。我希望用户必须选择male或…
Flask-RESTful-返回自定义响应格式 - python我已经按照以下Flask-RESTful文档定义了自定义响应格式。app = Flask(__name__) api = restful.Api(app) @api.representation('application/octet-stream') def binary(data, code, headers=None): resp =…
Flask-uploadnotallowed错误-重命名要保存的文件时 - python我正在尝试在flask中上传一个excel文件,并在保存时给它一个新名称,例如:oldname.xlsx到newname.xlsx。到目前为止,这是我的代码:from flask import Flask, render_template, send_file, request, redirect, url_for from flask_uploads im…