flask-quickstart
1. 项目特色
项目只提供 Flask 项目的基本框架和功能,包括:
- 用户认证
- 权限控制
- 访问记录
- 定时任务
- 单元测试
- Docker 部署
- ...
基于本项目开发的 Flask 程序,可以实现业务功能最大程度的定制化。
2. 文件结构
.
├── app
│ ├── api
│ │ ├── auth.py # api 认证处理函数
│ │ ├── basedata_api.py # 基础数据的 api
│ │ ├── errors.py # api 错误处理函数
│ │ ├── test_api.py # 测试接口的 api
│ │ └── token_api.py # 用户认证的 api
│ ├── auth
│ │ ├── forms.py # 页面认证表单
│ │ └── routes.py # 页面认证路由
│ ├── beans # 业务模型
│ ├── errors
│ │ └── handlers.py # app 全局错误处理函数
│ ├── main
│ │ ├── api
│ │ │ └── user_api.py # 用户管理的 api
│ │ ├── forms.py # 用户管理表单
│ │ ├── routes.py # index 路由
│ │ └── user_view.py # 用户管理理由
│ ├── static # 静态资源
│ ├── templates # jijia2 模板
│ ├── translations # 本地化翻译文本
│ ├── utils
│ │ ├── dt.py # 日期时间处理
│ │ ├── io.py # 文本文件读写
│ │ └── string.py # 字符串处理
│ ├── __init__.py # 应用工厂函数
│ ├── apscheduler.py # 解决多进程中APScheduler重复运行的问题
│ ├── cli.py # 自定义命令
│ ├── database.py # 数据库初始化
│ ├── email.py # 发送电子邮件
│ ├── jobs.py # 设置定时人物
│ ├── models.py # 系统模型
│ ├── modules.py # 注册功能模块
│ ├── momentjs.py # 日期时间本地化
│ ├── page.py # 分页参数
│ └── permission.py # 访问权限控制
├── config
│ ├── docker-compose.yml # 部署 Docker 启动
│ ├── nginx.conf # 部署 nginx 配置
│ └── supervisor.conf # 部署 supervisor 配置
├── data # 元数据
├── docker # 运行时 Docker 镜像构建
├── migrations # 数据库表结构迁移
├── mysql # mysql 容器启动
├── scripts
│ ├── clean_pycache.sh # 清理 pyc 脚本
│ └── start_docker_debug.sh # 启动 debug 容器脚本
├── tests # 单元测试
├── .env.template # .env 文件模板
├── .flaskenv # flask 环境变量
├── babel.cfg # 本地化配置
├── boot.sh # 部署 Docker 启动脚本
├── config.py # flask 配置读取脚本
├── main.py # flask 主程序
├── README.md # README
├── release.dockerfile # 部署 Docker 镜像构建
├── requirements.txt # 项目依赖
└── setup.cfg # 单元测试配置
3. conda 调试
3.1. 安装 pip 依赖
conda create -n flask_quickstart_venv python=3.6
conda activate flask_quickstart_venv
pip install -r requirements.txt
3.2. 创建数据库
-- 创建数据库 flask_quickstart
drop database if exists flask_quickstart;
create database flask_quickstart character set 'utf8' collate 'utf8_general_ci';
-- 创建用户 flask_quickstart 并授权
drop user if exists 'flask_quickstart'@'%';
create user 'flask_quickstart'@'%' identified by 'flask_quickstart123456';
flush privileges;
grant all privileges on flask_quickstart.* to 'flask_quickstart'@'%';
flush privileges;
-- 开发环境下还需要创建测试数据库 flask_quickstart_test
drop database if exists flask_quickstart_test;
create database flask_quickstart_test character set 'utf8' collate 'utf8_general_ci';
grant all privileges on flask_quickstart_test.* to 'flask_quickstart'@'%';
flush privileges;
-- 查询 MySQL 的所有用户
select host, user, authentication_string from mysql.user;
-- 查看用户 flask_quickstart 的权限
show grants for 'flask_quickstart'@'%';
3.3. 修改配置文件
cp .env.template .env
# .env
APP_NAME=flask_quickstart
SECRET_KEY=a_random_and_long_string
DB_SERVER=localhost
DB_PORT=33060
DB_USERNAME=flask_quickstart
DB_PASSWORD=flask_quickstart123456
DB_DATABASE=flask_quickstart
DB_DATABASE_TEST=flask_quickstart_test
MAIL_SERVER=
MAIL_PORT=
MAIL_USE_SSL=
MAIL_USERNAME=
MAIL_PASSWORD=
MAIL_ADMINS=
# .flaskenv
FLASK_APP=main.py
FLASK_ENV=development
# FLASK_ENV=production
3.4. 执行表结构迁移
# flask db init
# flask db migrate -m "create tables"
flask db upgrade
3.5. 编译翻译文本
# flask translate init zh
# flask translate update
flask translate compile
3.6. 启动调试
flask run
# or
flask run -h 0.0.0.0 -p 8000
flask shell
flask routes
bash scripts/clean_pycache.sh
4. Docker 调试
4.1. 启动 mysql 容器
docker pull mysql:8.0
# or
docker pull registry_url/mysql:8.0
docker tag image_id mysql:8.0
# 修改 mysql 数据挂载目录
vim mysql/docker-compose.yml
cd mysql
docker-compose up -d
docker logs -f flask_quickstart_mysql
4.2. 构建运行时镜像
cd docker
docker build --squash -t flask_quickstart:latest .
# or
docker pull registry_url/flask_quickstart:latest
docker tag image_id flask_quickstart:latest
4.3. 启动 debug 容器
bash script/start_docker_debug.sh
docker exec -it flask_quickstart_debug bash
cd /exec
修改配置文件
4.4.只有调试时需要
.env
文件,部署时通过环境变量配置。
执行表结构迁移
4.5.编译翻译文本
4.6.启动调试
4.7.5. Docker 部署
启动 mysql 容器
5.1.构建运行时镜像
5.2.5.3. 修改配置文件
vim config/nginx.conf
vim config/supervisor.conf
5.4. 构建部署镜像
docker build --squash -t flask_quickstart:deploy_date -f release.dockerfile .
5.5. 启动 app 容器
# 修改 nginx、supervisor、log、tmp 挂载目录
vim config/docker-compose.yml
cd config
docker-compose up -d
docker logs -f flask_quickstart_app
docker exec -it flask_quickstart_app bash
htop
service supervisor status
service nginx status
netstat -tnl | grep 8000
netstat -tnl | grep 8080