create_app初始化

情景介绍(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说不定哪天就出现了循环导包的问题。

以上

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。