https://github.com/fishjar/flask-rest-boilerplate
flask rest bolierplate
https://github.com/fishjar/flask-rest-boilerplate
Last synced: about 1 year ago
JSON representation
flask rest bolierplate
- Host: GitHub
- URL: https://github.com/fishjar/flask-rest-boilerplate
- Owner: fishjar
- License: gpl-3.0
- Created: 2019-11-13T02:40:44.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2022-05-25T02:39:59.000Z (about 4 years ago)
- Last Synced: 2025-03-25T15:53:05.255Z (about 1 year ago)
- Language: Python
- Size: 82 KB
- Stars: 2
- Watchers: 2
- Forks: 3
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# flask rest boilerplate
## 使用指引
```sh
# 虚拟环境
# apt-get install python3-venv
python3 -m venv venv
# 激活
. venv/bin/activate
# 安装依赖
# pip install Flask
# pip install Flask-SQLAlchemy
# pip install flask-marshmallow
# pip install marshmallow-sqlalchemy
# pip install PyJWT
# pip install schema
# pip install pymysql
pip install -r requirements.txt
# 环境变量
export FLASK_APP=flaskr
# export FLASK_ENV=production # 缺省值
# export FLASK_ENV=testing
export FLASK_ENV=development
# 初始化
flask init-db
# 运行
flask run
# 打开一个 Shell
flask shell
# 导出依赖
pip freeze > requirements.txt
```
### 生产部署
```sh
# 依赖
pip install gunicorn
pip install gevent
# 如有需要
# 启动一个数据库
sudo docker-compose -f docker-compose.mysql.yml up -d
# 运行
# gunicorn main:app -w 4 -e FLASK_ENV=production -b :8000
gunicorn -c gunicorn.py main:app
```
### docker 部署
```sh
# 编辑环境变量
vi .env.prod
# 启动
docker-compose up -d
# 初始化数据
docker-compose exec web flask init-db
# 测试
curl 127.0.0.1:8000
curl -H "Content-Type: application/json" -d '{"userName":"gabe","password":"123456"}' 127.0.0.1:8000/login/account
# 进入容器
docker-compose exec web bash
docker-compose exec db bash
```
## 存在问题
- (已解决,存小小问题)`Relationships` 问题: [参考](https://docs.sqlalchemy.org/en/13/orm/basic_relationships.html)
- 模型相互引用问题,网上很多类似问题:[参考](https://stackoverflow.com/questions/34421205/sqlalchemy-model-circular-import/34503823),[2](https://stackoverflow.com/questions/58095513/flask-sqlalchemy-relationship-error-name-classname-is-not-defined-using-diff)
- `Menu` 自引用问题,`remote_side=[id]` 的 `id`在`BaseModel`定义,如何引入
- `User`、`Group`、`UserGroup` 相互引用问题
- 部分错误无法被`_handle_exception`捕获,而是被内置处理器捕获了
- (已解决)暂无优雅的数据校验,`sqlalchemy` 推荐的校验方式很繁琐
## 目录结构
```sh
├── docker-compose.mysql.yml
├── docker-compose.yml
├── Dockerfile
├── flaskr
│ ├── config.py
│ ├── handler
│ │ ├── Auth.py
│ │ ├── Group.py
│ │ ├── __init__.py
│ │ ├── Login.py
│ │ ├── Menu.py
│ │ ├── Role.py
│ │ ├── UserGroup.py
│ │ └── User.py
│ ├── __init__.py
│ ├── model
│ │ ├── Auth.py
│ │ ├── Base.py
│ │ ├── Group.py
│ │ ├── __init__.py
│ │ ├── Menu.py
│ │ ├── Role.py
│ │ ├── UserGroup.py
│ │ └── User.py
│ ├── router
│ │ └── __init__.py
│ └── utils
│ ├── auth.py
│ ├── bp.py
│ ├── cmd.py
│ ├── err.py
│ ├── __init__.py
│ ├── jwt.py
│ ├── log.py
│ └── __pycache__
├── gunicorn.py
├── LICENSE
├── main.py
├── README.md
└── requirements.txt
```