4. Flask个人博客实战-项目结构

官方Flask的最小应用 hello.py:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
   return 'Hello, World!'

这里引入了 Flask 类,接着创建了一个 app 实例,然后我们使用 route() 装饰器来告诉 Flask 触发函数的 URL 。 但这只适合小项目,然而,当项目越来越大的时候,把所有代码放在单个文件中就有点不堪重负了。 Python 项目使用包来管理代码,把代码分为不同的模块,然后在需要的地方导入模块。 本文也会按这一方式管理代码。

blog项目根目录查看的项目结构,教程项目包含如下内容:

app/ 一个包含应用代码和文件的 Python 包。
logs/ 一个包含测试模块的文件夹。
migrations/ 一个 Python 虚拟环境,用于安装 Flask 和其他依赖的包。
run.py 是开发环境应用。
wsgi.py 是线上应用。

版本控制配置 git, 不管项目大小, 应当养成使用版本控制的习惯。

最后,项目基本结构是这种:

├── Pipfile #pipenv 依赖管理
├── Pipfile.lock
├── app
│   ├── admin #后台管理模块,里面会有article.py auth.py user.py...
│   │   ├── __init__.py
│   │   ├── article.py
│   │   ├── auth.py
│   │   ├── category.py
│   │   └── users.py
│   ├── blog #博客前台展示,里面的文件有blog.py里面有几个方法代表着首页,列表页,内容页等逻辑
│   ├── apis #提供第三方的API
│   ├── forms #表单的模块
│   ├── models #模型的模块用的是sqlalchemy
│   ├── static #APP的静态目录,存放着css,images,js这些
│   ├── templates #模板文件,里面一般是按模块分
│   │   ├── admin
│   │   ├── errors
│   │   ├── blog
│   │   ├── layout
│   │   └── macros
│   ├── __init__.py #app应用的入口文件,一般工厂函数都在这
│   ├── cli.py #flask cli的命令集合
│   ├── config.py #配置文件
│   ├── decorators.py #装饰器的一些共用的函数
│   ├── extensions.py #扩展的集合,都在这里组合,这样不会有交叉的import问题
│   ├── filter.py #模块的过滤集合,一般是状态的一些小函数
│   └── helpers.py #小工具
├── logs #日志
├── migrations #数据库的版本与迁移,这个目录是flask-migrate自动管理的
├── run.py #开发版本,这里一般是flask run运行的
└── wsgi.py #线上版本,一般用gunicorn来运行的

提示

目录结构没有一定的标准,其实是很自由的,目标是为了更好的管理项目,我的规则就是小的用文件,大的用模块,比如 admin 他可以是一个 admin.py,但是数据量大了,所以拆分为包。
如果使用了版本控制,那么应当忽略运行项目时产生的临时文件以及编辑代码时编辑 器产生的临时文件。 忽略文件的基本原则是:不是你自己写的文件就可以忽略。举例来说,假设使用 git 来进行版本控制, 那么使用 .gitignore 来设置应当忽略 的文件,.gitignore 文件应当与下面类似:

.gitignore:

.venv/ #pipenv 的环境目录
.idea/
.vscode/ #当用VScode工具开发时他会生成的目录

*.pyc
__pycache__/

logs/*.log #过滤本地日志
instance/ #过滤falsk实例目录
.env #过滤本地私有环境

接下来我们来搭建项目。