情景介绍(flask)
一般来说,每个项目都会有一个初始化create_app
现在为什么要聊一聊这个呢,假设项目配置了celery(异步任务),然后还配置了Alembic。
这两个都是需要获取你的初始化create_app的,但是他们之间又有着细微的差别。
celery并不需要create_app中的注册路由的部分(如果结构目录写的比较随意,甚至可能因此产生循环导包),也不需要Alembic(数据库迁移管理工具)初始化。
项目启动也不需要加载celery的配置信息。
虽然可以公用同一个,但是还是既然部分是无用的,我们还是分开比较好。
在开始之前先展示一下大概的项目文件目录,良好的文件目录可以大大减少重复导包的几率。
首先我们可以在api的同级目录下的utils定义一个基本的create_app。
这个初始化的app中只有最基本的配置信息(所有需要create_app的地方都需要用到的配置信息)。
其次,我们在具体的api目录中加载上图中的create_app参数并且加入更加具体的项目启动需要用到的配置。
类似于路由注册,跨域配置,大都不是其他地方需要用到的,仅限于启动文件。
然后我们在项目启动文件导入这个api_create_app来启动文件
关于Alembic推荐在启动文件的同级目录中加载,因为产生的数据库迁移文件目录会在默认的当前文件目录下
再然后就是celery的create_app配置
首先,这里导入的create_app是tasks同级目录下的utils文件里面的create_app,也就是最早的create_app,因为celery在启动的时候并不需要项目启动时候的一些配置。
看起来像是做了一些无用功,理论上一个create_app就可以解决所有问题,但是当后续视图函数以及异步任务逐渐丰富起来的时候,使用同一个create_app说不定哪天就出现了循环导包的问题。
以上