最近flask理解又进了一步,记录一下。
关于工厂函数:
bootstrap = Bootstrap()
mail = Mail()
moment = Moment()
db = SQLAlchemy()
pagedown = PageDown()
login_manager = LoginManager()
login_manager.session_protection = 'strong'
login_manager.login_view = 'auth.login'
def create_app(config_name):
app = Flask(__name__)
app.config.from_object(config[config_name])
config[config_name].init_app(app)
bootstrap.init_app(app)
mail.init_app(app)
moment.init_app(app)
db.init_app(app)
login_manager.init_app(app)
pagedown.init_app(app)
app = create_app(os.getenv('FLASK_CONFIG') or 'default')
这里flask web 开发那本书没有说到的一点就是,flask的所有扩展都被设计成了可以先创建应用程序,然后再导入app 应用变量,因为如上面的 db=sqlalchemy() 都是全局的,而app 则可以有不止一个,所以设计成了先创建应用程序扩展,再绑定app,再通过form_object导入 实现好的config 配置 其中的一些配置在通过init_app传入相应程序中,最后通过 crate_app()来进行调用, os.getenv()来获取环境变量中的flask_config.然后执行。
最后我要说一句,google的oauth2认证,真的好坑啊... 我要哭了...
————————————————————————————————update(备忘)
来自知乎专栏: https://zhuanlan.zhihu.com/flask
1、实例化扩展类
在一个小的程序里,可以直接导入扩展类,传入当前的程序实例(即“app”):
from flask import Flask
from flask_bootstrap import Bootstrap