flask-security:如何在blueprint / extension app模式中使用?

时间:2017-01-31 20:44:19

标签: 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()

然后在app.py中调用使用register_extensions(app)方法的init_app(app):{/ p>

bcrypt.init_app(app)
security.init_app(app)

确实flask-security有一个init_app()方法。但文档说安全对象需要一个需要用户和角色模型的DataStore对象。到目前为止,没有其他扩展需要在app.py中导入用户和角色模型感觉不正确。

使用'大型Flask应用'模型时使用Flask-Security的最佳做法是什么...我发现文档没有用。在一个地方定义所有对象的情况很简单。

2 个答案:

答案 0 :(得分:4)

以下是我所拥有的。

extensions.py

from flask_sqlalchemy import SQLAlchemy
from flask_security import Security


db = SQLAlchemy()
security = Security()

__初始化__。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)

答案 1 :(得分:0)

我也很喜欢烧瓶。我认为flask-security假设您正在使用像SQLAlchemy这样的ORM,因此可能会创建一个名为' models.py'并将db模式放在那里,包括USER和ROLE。

与其他大多数不需要存储数据的扩展相比,Flask -security需要一个存储注册用户以后访问它们以进行登录的地方。

希望这有帮助。