上一篇我们讲到了用blueprints实现应用模块化,但一个Hello World算不上一个完整的应用。这一期我们从一个个人Blog的搭建讲怎么构建一个实际的应用。
实例代码可以参考:
https://github.com/yeahx/microtype
一、blueprints 与 应用解耦
问:为什么要解耦?
答:我们使用blueprints 的目的就是为了应用模块化,为了复用,如果不能解耦,那么就很难复用,会重复好多的代码或者需要大量的修改,这就违背了模块的初衷。
问:什么地方需要解耦?
答: 首先最直接的地方就是数据model部分。
每个 blueprints 并不是一个独立的应用,它可以被 register_blueprint (参见上次测示例代码或官方文档)多次,如果每个blueprints 都有自己数据库当然最好,但是我们的个人Blog并不会使用那么多数据库,而且如果众多blueprints 使用的都是同一种数据库的,每个 blueprints 都对数据库进行一次包装是浪费的,数据库部分的工作应当放到Flask应用层。
那么紧接着就有了新的问题,怎么解耦?
Flask应用引用blueprints 对其进行注册,blueprints 引用应用的数据库,这不是循环引用了吗? 其实上次的文中我们已经提供了思路,使用 包管理。
于是我们的顶层目录看起来就是这个样子:
而每个 blueprints 自成体系,我们在 database.py 这个文件中,定义了应用的数据库对象。这里使用的是 flask-mongoengine ,如果你想使用其他数据库,请参照其文档进行修改。
这样,如果想在其他地方使用这个 blueprints 只需要更改导入的路径和名称就可以了。(其实还有别的办法,小编先卖个关子,,)
解耦部分还有模板,静态文件,这些在定义blueprints 时可以简单的设置,这里就不再赘余。
二、flask与Django并存
上次说到,我们最终选择了一个折中的方案,保留原始部分,新内容使用flask写。那这两个不同的框架又是怎么整合到一块的呢?
这就要讲一下flask的来源。 werkzeug (框架)的作者演示他的框架怎么构建一个web框架,于是乎flask就诞生了。flask是建立在werkzeug上的WSGI 应用,因此每个flask在任何 WSGI 服务器上运行,于是,只要在django得到WSGI 应用,就可以将两者统一到一起
注:代码参看flask文档,这只是开发环境,实际部署之后会再细说。
这样两个或多个WSGI 应用就可以同时运行了。思维敏捷的你肯定想到了,这不仅可以用于flask、django的并存啊,两个flask应用也可以啊。
小结:
这一期,主要是blueprints 数据model如何定义和怎么保持原来内容。理论的太多,具体代码没有贴几行,如果想实例学习,可以参见文章前面的github地址。
公众号:itest_forever
CSDN:http://blog.csdn.NET/itest_2016
QQ群:274166295(爱测未来2群)、610934609(爱测未来3群)