尝试实施烧瓶安全
Trying to implement flask-security
我正在尝试创建骨架,并且我正在为 login/admin 使用 Flask 安全性。
在我的应用程序文件夹中,我有一个创建应用程序的功能:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_security import Security, SQLAlchemyUserDatastore
from .views.home import home_blueprint
from .views.contact import contact_blueprint
from .views.login import login_blueprint, bcrypt, login_manager
from .models import db
from .models.user import User, Role
def create_app():
app = Flask(__name__, instance_relative_config=True)
db.init_app(app)
bcrypt.init_app(app)
login_manager.init_app(app)
app.register_blueprint(home_blueprint)
app.register_blueprint(contact_blueprint)
app.register_blueprint(login_blueprint)
app.config.from_object('config')
user_datastore = SQLAlchemyUserDatastore(db, User, Role)
security = Security(app, user_datastore)
return app
现在,当我尝试创建一个虚拟管理员用户进行测试时,问题出现了。
为此,我在骨架根文件夹中有一个 create_db.py 文件。
from app import create_app
from sqlalchemy import exists
from flask_security.utils import encrypt_password
from app.models import db
from app.models.user import Role, User
create_app().app_context().push()
db.create_all()
user_role = Role(name='user')
db.session.add(user_role)
db.session.commit()
super_user_role = Role(name='superuser')
db.session.add(super_user_role)
db.session.commit()
user_role = Role(name='user')
super_user_role = Role(name='superuser')
admin_user = user_datastore.create_user(
username='admin',
email='admin',
password=encrypt_password('admin'),
confirmed_at=datetime.datetime.now(),
roles=[user_role, super_user_role]
)
db.session.commit()
当我 运行 我得到 NameError: user_datastore not define?
为了故事的目的,我首先实现了 flask-login 并且能够创建一个数据库。
在文件 create_db.py 中,变量 user_datastore
不存在,因此出现错误。您可以在 create_dy.py
(未测试)中执行类似以下操作:
app = create_app()
app.app_context().push()
# get the app security instance
security = app.extensions.get('security')
# or like this
# security = app.extensions['security']
# ... etc
# Use the security api to create users
admin_user = security.datastore.create_user(
username='admin',
email='admin',
password=encrypt_password('admin'),
confirmed_at=datetime.datetime.now(),
roles=[user_role, super_user_role]
)
# ... etc
此外,我不确定您是否需要在 create_app()
函数中 login_manager.init_app(app)
。
我正在尝试创建骨架,并且我正在为 login/admin 使用 Flask 安全性。
在我的应用程序文件夹中,我有一个创建应用程序的功能:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_security import Security, SQLAlchemyUserDatastore
from .views.home import home_blueprint
from .views.contact import contact_blueprint
from .views.login import login_blueprint, bcrypt, login_manager
from .models import db
from .models.user import User, Role
def create_app():
app = Flask(__name__, instance_relative_config=True)
db.init_app(app)
bcrypt.init_app(app)
login_manager.init_app(app)
app.register_blueprint(home_blueprint)
app.register_blueprint(contact_blueprint)
app.register_blueprint(login_blueprint)
app.config.from_object('config')
user_datastore = SQLAlchemyUserDatastore(db, User, Role)
security = Security(app, user_datastore)
return app
现在,当我尝试创建一个虚拟管理员用户进行测试时,问题出现了。 为此,我在骨架根文件夹中有一个 create_db.py 文件。
from app import create_app
from sqlalchemy import exists
from flask_security.utils import encrypt_password
from app.models import db
from app.models.user import Role, User
create_app().app_context().push()
db.create_all()
user_role = Role(name='user')
db.session.add(user_role)
db.session.commit()
super_user_role = Role(name='superuser')
db.session.add(super_user_role)
db.session.commit()
user_role = Role(name='user')
super_user_role = Role(name='superuser')
admin_user = user_datastore.create_user(
username='admin',
email='admin',
password=encrypt_password('admin'),
confirmed_at=datetime.datetime.now(),
roles=[user_role, super_user_role]
)
db.session.commit()
当我 运行 我得到 NameError: user_datastore not define?
为了故事的目的,我首先实现了 flask-login 并且能够创建一个数据库。
在文件 create_db.py 中,变量 user_datastore
不存在,因此出现错误。您可以在 create_dy.py
(未测试)中执行类似以下操作:
app = create_app()
app.app_context().push()
# get the app security instance
security = app.extensions.get('security')
# or like this
# security = app.extensions['security']
# ... etc
# Use the security api to create users
admin_user = security.datastore.create_user(
username='admin',
email='admin',
password=encrypt_password('admin'),
confirmed_at=datetime.datetime.now(),
roles=[user_role, super_user_role]
)
# ... etc
此外,我不确定您是否需要在 create_app()
函数中 login_manager.init_app(app)
。