说到 Flask
,这是我接触的第一个后端架构,也基本是目前唯一一个比较熟悉的。
对于规范化,这当然是很有必要的,特别是你的项目越做越复杂,不断增加新功能的时候,就会发现如果一开始结构很差,基本就需要大规模重构了。而重构,又通常是说说而已,真正动手完全重构什么的是不存在的,这么丑的代码,就算是我自己写得,我也不想再看了。
所以呢,一开始就尽可能做得规范一点,这样以后看起来就很舒服了,进行修改也会变得相对简单,别人要接手也不会看吐了。
目录
大概长这个样子:
.
├── docker-compose.yml
├── Dockerfile
├── docs/
├── main.py
├── README.md
├── requirements.txt
├── run.sh
├── app_name/
│ ├── config.py
│ ├── data/
│ ├── __init__.py
│ ├── static/
│ │ ├── css/
│ │ ├── fonts/
│ │ ├── img/
│ │ └── js/
│ ├── templates/
│ │ ├── index.html
│ │ ├── layout.html
│ │ ├── blueprint_1
│ │ └── blueprint_n
│ └── blueprints/
│ ├── __init__.py
│ ├── blueprint_1.py
│ └── blueprint_n.py
└── tests
先说根目录,一般都用 Docker 的,这里就需要两个配置文件 Dockerfile
和 docker-compose.yml
了;README
当然还是要写的;requirements.txt
里面写上项目用到的各种包;main.py
和 run.sh
,前者是项目的运行文件,后者是考虑如果使用 gunicorn
的话,写到文件里比较省事;docs
和 tests
目录也是需要有的,虽然不是每个人都写测试和文档;最后 app_name
,是整个项目的主体。
在 app_name
下,每个包含 Python 的文件都需要 __init__.py
,config.py
里面包含项目的各种配置,static
,templates
里面是前端的文件,blueprints
里面包含各个模块的 blueprint。
用法
这里主要说明的是 Blueprint 在项目中的重要作用。
对于有一定规模的项目来说,通常会有很多不同用途的组件,比如用户登录相关的,API 相关的,某个重要功能相关的等等,这时候利用不同的 Blueprint 加以区分就能够简化整个项目结构,降低模块间的耦合,不管是对于协作开发还是增改功能都有很大益处。
针对不同的 Blueprint,HTML 文件最好也放置在 template
下不同的文件夹中。
在使用 Blueprint 的过程中,有几点需要特别注意:
__init__.py
文件并不是摆设,通常里面需要 import 该文件夹下相关的模块,也可以做一些初始化一类的操作,尤其是app_name
文件夹下的,需要设置各种扩展,以及注册所需的 Blueprint- 使用这种结构的时候,新手很容易发生 Circular import 问题,这个通常是自己没设计好。另外,推荐大家熟悉一下 Python import 的细节,了解一点底层的东西,就能很好解决这个问题了。我发现有时候改变一下
import
命令的上下位置就可以解决一些问题了……不过这种方法并不优雅 - 推荐所有使用 css/js 的地方都用
url_for
来解决
常用扩展
flask_login
用户登录,做一些权限限制等flask_sqlalchemy
数据库操作的 ORMflask_wtf
提供简单的 WTForms 集成,方便控制表单flask_restful
方便写 RESTful API
其他的可以浏览 Flask Extensions Registry 。