封面 Flask Web 的项目结构

封面 Flask Web 的项目结构

一个脚本中写一个Web程序是不可取的,当项目变大时,会产生很多问题。虽然Flask项目没有固定的组织形式,不过,根据前人的经验,一般的项目建议取用如下的结构(如博客建站),当然如果自己很熟练的习惯或者有更好的方式,可以使用自己的习惯。

|-flasky

|-app/

|-templates/

|-static/

|-main/

|-__init__.py

|-errors.py

|-forms.py

|-views.py

|-__init__.py

|-email.py

|-models.py

|-migrations/

|-tests

|-__init__.py

|-test*.py

|-venv/

|-requirements.txt

|-config.py

|-manage.py

封面 Flask Web 的项目结构

这种结构有4个顶级文件夹,Flask程序保存在名为app的包中,migrations文件夹数据库迁移脚本,单元测试写在tests包中,venv是python运行的虚拟环境。另外requirements.txt列出的是本虚拟环境所需要的包,方便在其他地方部署同样的环境,config.py是配置文件信息,manage.py是负责启动程序以及其他程序任务。

配置文件中,建议使用层次结构的配置类,而不是简单的字典状结构,而且,配置信息建议区分开发,测试和生产环境,各自使用不同的数据库,这样彼此不会干扰。这时通常会用到类继承,基类config包含通用配置,继承类分别定义专用配置。配置类可以定义init_app()类方法,参数是程序实列。敏感信息保存在环境变量,这样的配置灵活且安全。

这里补充说一下程序包,所谓程序包就是保存程序所有代码,模板,静态文件的文件夹,我们通常会称这个包为app(应用)。

封面 Flask Web 的项目结构

单个文件开发程序虽然方便,但是缺点很明显,因为程序在全局作用域中创建,所以无法动态修改配置,运行脚本时,程序实例已经创建,再想修改配置就不可能了。这一点对于单元测试尤为重要。这个问题的解决方法就是延迟创建程序实例,把创建过程移到可显式调用的工厂函数中。这样不仅可以给脚本留出配置程序的时间,还能够创建多个程序实例。这么有用的工厂函数在app包的构造文件中定义。

关于工厂函数的定义以及使用蓝本等内容,明天再继续。敬请期待。


分享到:


相關文章: