flask-security:如何在蓝图/扩展应用程序模式中使用?

Tim*_*son 5 flask flask-security

我想使用flask-security。我正在使用模板烧瓶应用程序,该应用程序创建扩展的全局对象,然后在创建应用程序时对其进行初始化。例如在extensions.py中,有如下代码:

from flask_bcrypt import Bcrypt
from flask_caching import Cache ...
from flask_security import Security ...
bcrypt = Bcrypt() ...
security = Security()
Run Code Online (Sandbox Code Playgroud)

然后在app.py调用register_extensions(app)中使用如下init_app(app)方法:

bcrypt.init_app(app)
security.init_app(app)
Run Code Online (Sandbox Code Playgroud)

实际上,烧瓶安全性是一种init_app()方法。但是文档说安全对象需要一个数据存储对象,该对象需要用户和角色模型。到目前为止,没有其他扩展程序需要将用户和角色模型导入app.py中是不合适的。

在使用“大型Flask应用程序”模型时,使用Flask-Security的最佳实践是什么?我认为文档没有帮助。当所有对象都定义在一个地方时,这是一种简单的情况。

小智 5

以下是我所拥有的。

extensions.py

from flask_sqlalchemy import SQLAlchemy
from flask_security import Security


db = SQLAlchemy()
security = Security()
Run Code Online (Sandbox Code Playgroud)

__init__.py

from .extensions import db, security
from .models import User, Role

def create_app(config_name):
    user_datastore = SQLAlchemyUserDatastore(db, User, Role)
    security.init_app(app, user_datastore)
Run Code Online (Sandbox Code Playgroud)