<a href="#%E7%9B%AE%E5%BD%95">目录</a>
<a href="#%E5%89%8D%E6%96%87%E5%88%97%E8%A1%A8">前文列表</a>
<a href="#%E5%B7%A5%E5%8E%82%E6%A8%A1%E5%BC%8F">工厂模式</a>
<a href="#%E4%BD%BF%E7%94%A8%E5%B7%A5%E5%8E%82%E6%96%B9%E6%B3%95-factory-method-%E5%88%9B%E5%BB%BA-app-%E5%AF%B9%E8%B1%A1">使用工厂方法 Factory Method 创建 app 对象</a>
<a href="http://blog.csdn.net/jmilk/article/details/53150084">用 Flask 来写个轻博客 (1) — 创建项目</a>
<a href="http://blog.csdn.net/jmilk/article/details/53152158">用 Flask 来写个轻博客 (2) — Hello World!</a>
<a href="http://blog.csdn.net/jmilk/article/details/53153382">用 Flask 来写个轻博客 (3) — (M)VC_连接 MySQL 和 SQLAlchemy</a>
<a href="http://blog.csdn.net/jmilk/article/details/53184903">用 Flask 来写个轻博客 (4) — (M)VC_创建数据模型和表</a>
<a href="http://blog.csdn.net/jmilk/article/details/53187575">用 Flask 来写个轻博客 (5) — (M)VC_SQLAlchemy 的 CRUD 详解</a>
<a href="http://blog.csdn.net/jmilk/article/details/53229180">用 Flask 来写个轻博客 (6) — (M)VC_models 的关系(one to many)</a>
<a href="http://blog.csdn.net/jmilk/article/details/53239740">用 Flask 来写个轻博客 (7) — (M)VC_models 的关系(many to many)</a>
<a href="http://blog.csdn.net/jmilk/article/details/53241361">用 Flask 来写个轻博客 (8) — (M)VC_Alembic 管理数据库结构的升级和降级</a>
<a href="http://blog.csdn.net/jmilk/article/details/53264049">用 Flask 来写个轻博客 (9) — M(V)C_Jinja 语法基础快速概览</a>
<a href="http://blog.csdn.net/jmilk/article/details/53292248">用 Flask 来写个轻博客 (10) — M(V)C_Jinja 常用过滤器与 Flask 特殊变量及方法</a>
<a href="http://blog.csdn.net/jmilk/article/details/53303870">用 Flask 来写个轻博客 (11) — M(V)C_创建视图函数</a>
<a href="http://blog.csdn.net/jmilk/article/details/53306560">用 Flask 来写个轻博客 (12) — M(V)C_编写和继承 Jinja 模板</a>
<a href="http://blog.csdn.net/jmilk/article/details/53321939">用 Flask 来写个轻博客 (13) — M(V)C_WTForms 服务端表单检验</a>
<a href="http://blog.csdn.net/jmilk/article/details/53327164">用 Flask 来写个轻博客 (14) — M(V)C_实现项目首页的模板</a>
<a href="http://blog.csdn.net/jmilk/article/details/53332204">用 Flask 来写个轻博客 (15) — M(V)C_实现博文页面评论表单</a>
<a href="http://blog.csdn.net/jmilk/article/details/53342517">用 Flask 来写个轻博客 (16) — MV(C)_Flask Blueprint 蓝图</a>
<a href="http://blog.csdn.net/jmilk/article/details/53352359">用 Flask 来写个轻博客 (17) — MV(C)_应用蓝图来重构项目</a>
工厂模式:就是通过某一个接口函数或对象来创建另一个对象,而这个接口函数也称之为工厂函数。 工厂模式使一个类的实例化延迟到其子类。也就是说工厂模式可以推迟到在程序运行的时候才动态决定要创建哪个类的实例,而不是在编译时就必须知道要实例化哪个类。
工厂函数:一个用于创建对象的接口(create_object_interface(variables)),让子类来决定(根据不同 variables 作为条件来判断)实例化那一个类的对象。
EXAMPLE:
这样做的好处:
可以利用 shell 环境(env)的上下文来动态的改变 app 的初始配置 config,达到了服务器会根据不同的 env 来得到正确 app config 的效果。
这样会让测试变得简单,因为我们随时可以快速的转换 app config 并开展测试。
反之,也能够使用相同的 config 来生成多个相同的 app object,这对在跨多个服务器进行流量负载均衡的时候是很有用的。
jmilkfansblog/__init__.py
NOTE 1:将 <code>app.config.from_object(object_name)</code> 接收的参数定义成一个变量,这样就可以通过接收不同类型的实参来生成不同的 app 对象。
NOTE 2:在 create_app() 这个函数中,完成了 db/config/route/blueprint 的初始化工作之后,再返回这个 app 对象。
manage.py
NOTE 1:现在的 manager shell 在每次启动的时候,都会获取一次 OS 的环境变量,并以此来创建 app 对象。
NOTE 2:默认使用 DevConfig 配置
NOTE 3:这样我们就可以根据手动设置的环境变量来达到生成相应的环境变量的效果,而不需要修改任何源码。
EXAMPLE 1:使用默认配置
EXAMPLE 2:手动设置使用 Config 配置
使用工厂函数生成的 app 对象,能够在程序运行的时候才被决定,这种自动适应不同运行环境的能力,使得程序更加灵活、健壮。