项目结构规范

我们在前面所举的例子基本都是写在一个单一的脚本文件中,比如 app.py,这在做一些简单的测试中是可行的,但是在较大的项目中则不应该这么做。好的项目结构可以让人更易于查找代码,也易于维护。当然了,每个团队都有自己的项目规范,在这里,我分享自己在平时的开发中经常用到的项目结构,仅供参考。

我们以该 TODO 项目为例,介绍项目结构。

为了方便,这里使用 shell 脚本生成项目基础骨架:

  1. # !/bin/bash
  2. dirname=$1
  3. if [ ! -d "$dirname" ]
  4. then
  5. mkdir ./$dirname && cd $dirname
  6. mkdir ./application
  7. mkdir -p ./application/{controllers,models,static,static/css,static/js,templates}
  8. touch {manage.py,requirements.txt}
  9. touch ./application/{__init__.py,app.py,configs.py,extensions.py}
  10. touch ./application/{controllers/__init__.py,models/__init__.py}
  11. touch ./application/{static/css/style.css,templates/404.html,templates/base.html}
  12. echo "File created"
  13. else
  14. echo "File exists"
  15. fi

将上面的脚本保存为文件 generate_flask_boilerplate.sh,使用如下命令生成项目骨架:

  1. $ sh generate_flask_boilerplate.sh flask-todo-app

生成的项目骨架如下所示:

  1. flask-todo-app
  2. ├── application
  3. ├── __init__.py
  4. ├── app.py
  5. ├── configs.py
  6. ├── controllers
  7. ├── __init__.py
  8. ├── extensions.py
  9. ├── models
  10. ├── __init__.py
  11. ├── static
  12. ├── css
  13. └── style.css
  14. └── js
  15. └── templates
  16. ├── 404.html
  17. ├── base.html
  18. ├── manage.py
  19. ├── requirements.txt

该项目骨架包含三个顶级文件(夹):application 目录、manage.py 文件和 requirements.txt 文件,在一般情况下,我们可能还需要一个 tests 目录,存放单元测试的代码,在这里,我们没有把它包含进来。下面,我解释一下该项目骨架:

  • application 目录存放 Flask 程序,包含业务逻辑代码、数据模型和静态文件等
    • configs.py 存放项目配置
    • models 目录存放数据模型文件
    • templates 目录存放模板文件
    • static 目录用于存放静态文件,如 js、css 等文件
  • manage.py 用于启动我们的 Web 程序以及其他的程序任务
  • requirements.txt 文件列出了项目的安装依赖包,便于在其他机器部署