快速创建Flask Restful API项目
2021-03-11 05:27
标签:makefile 生成 cci 地址 接口 gif red cut from 但是我们需要用 这篇文章主要介绍使用工具帮助我们进行一些 目前支持的python版本:3.6 | 3.7 | 3.8 安装cookiecutter 创建第一个项目 一路按回车键,就会生成一个新项目。 项目名字暂且叫 如果项目使用了pipenv管理虚拟环境: 安装依赖: 启动项目: 测试项目: 登录请求: 登录返回: 获取所有用户请求: 获取所有用户返回: 刷新token请求: 刷新token返回: 如果没有使用 测试项目同上 环境变量在 请根据你的实际情况进行配置。 直接用tox 使用pytest 使用 如果出现连接失败,你需要更改 启动celery 如果你的配置没有问题,在终端你会看到: 调用task: 使用 注意:目前Docker的配置只有开发环境 构建镜像: 启动镜像: 使用docker-compose启动: 使用 打开UI页面地址: 页面如下: 在 Enjoy your code, good luck. 快速创建Flask Restful API项目 标签:makefile 生成 cci 地址 接口 gif red cut from 原文地址:https://www.cnblogs.com/DeaconOne/p/12652504.html前言
Python
必学的两大web
框架之一Flask
,俗称微框架。它只需要一个文件,几行代码就可以完成一个简单的http请求服务。flask
来提供中型甚至大型web restful api
服务的时候就需要我们来规划项目结构。Django
框架有自身的生成项目结构的命令和生成app的命令,但是Flask
没有。Flask rest api
项目初始化的工作cookiecutter-flask-restful 介绍
cookiecutter-flask-restful
是一个基于cookiecutter
的Flask rest api
项目生成器,你可以用它快速生成Flask restful api
项目。项目特性
主要使用的包
快速开始
$ pip3 install cookiecutter
$ cookiecutter https://github.com/karec/cookiecutter-flask-restful
myproject
, app
名字暂且叫myapi
。运行项目
$ cd myproject
$ pipenv install -r requirements.txt
# 进入到虚拟环境
$ pipenv shell
$ pip install -e .
$ myapi db upgrade
$ myapi init
$ myapi --help
$ pipenv run flask run
$ curl -X POST -H "Content-Type: application/json" -d ‘{"username": "admin", "password": "admin"}‘ http://localhost:5000/auth/login
{
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE1ODYyMjUyNzIsIm5iZiI6MTU4NjIyNTI3MiwianRpIjoiZDM3NmViODktYWFkOC00ODZkLWE1NmUtZDdiNmQ3NjNhYmI2IiwiZXhwIjoxNTg2MjI2MTcyLCJpZGVudGl0eSI6MSwiZnJlc2giOmZhbHNlLCJ0eXBlIjoiYWNjZXNzIn0.-xCHCJHS3lKeiar-Z12HSOwd2DxAb9EeKFg9zMKWHfU",
"refresh_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE1ODYyMjUyNzIsIm5iZiI6MTU4NjIyNTI3MiwianRpIjoiMTcyNmI0ODEtMDJjYi00NWFhLTgyOWUtOGY0ODJlYmFlZTEyIiwiZXhwIjoxNTg4ODE3MjcyLCJpZGVudGl0eSI6MSwidHlwZSI6InJlZnJlc2gifQ.fpFH_vw8Lp-_xjDVoFLjF6HnjOKXR7PCLKIp8v9gSSU"
}
curl -X GET -H "Content-Type: application/json" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE1ODYyMjUyNzIsIm5iZiI6MTU4NjIyNTI3MiwianRpIjoiZDM3NmViODktYWFkOC00ODZkLWE1NmUtZDdiNmQ3NjNhYmI2IiwiZXhwIjoxNTg2MjI2MTcyLCJpZGVudGl0eSI6MSwiZnJlc2giOmZhbHNlLCJ0eXBlIjoiYWNjZXNzIn0.-xCHCJHS3lKeiar-Z12HSOwd2DxAb9EeKFg9zMKWHfU" http://127.0.0.1:5000/api/v1/users
{
"total": 3,
"pages": 1,
"next": "/api/v1/users?page=1&per_page=50",
"prev": "/api/v1/users?page=1&per_page=50",
"results": [
{
"active": true,
"id": 1,
"email": "admin@mail.com",
"username": "admin"
},
{
"active": true,
"id": 2,
"email": "",
"username": ""
},
{
"active": true,
"id": 3,
"email": "string",
"username": "string"
}
]
}
curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZGVudGl0eSI6MSwiaWF0IjoxNTEwMDAwNDQxLCJ0eXBlIjoicmVmcmVzaCIsImp0aSI6IjRmMjgxOTQxLTlmMWYtNGNiNi05YmI1LWI1ZjZhMjRjMmU0ZSIsIm5iZiI6MTUxMDAwMDQ0MSwiZXhwIjoxNTEyNTkyNDQxfQ.SJPsFPgWpZqZpHTc4L5lG_4aEKXVVpLLSW1LO7g4iU0" http://127.0.0.1:5000/auth/refresh
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0eXBlIjoiYWNjZXNzIiwiaWRlbnRpdHkiOjEsImlhdCI6MTUxMDAwMDYxOCwiZnJlc2giOmZhbHNlLCJqdGkiOiIzODcxMzg4Ni0zNGJjLTRhOWQtYmFlYS04MmZiNmQwZjEyNjAiLCJuYmYiOjE1MTAwMDA2MTgsImV4cCI6MTUxMDAwMTUxOH0.cHuNf-GxVFJnUZ_k9ycoMMb-zvZ10Y4qbrW8WkXdlpw"
}
pipenv
管理虚拟环境,直接使用的系统python
环境:$ cd myproject
$ pip install -r requirements.txt
$ pip install -e .
# 初始化项目
$ myapi db upgrade
$ myapi init
$ myapi --help
项目环境变量配置
.flaskenv
文件中FLASK_ENV=development
FLASK_APP="myapp.app:create_app"
SECRET_KEY=changeme
DATABASE_URI="sqlite:////tmp/myapp.db"
CELERY_BROKER_URL=amqp://guest:guest@localhost/ # only present when celery is enabled
CELERY_RESULT_BACKEND_URL=amqp://guest:guest@localhost/ # only present when celery is enabled
测试
$ tox
$ pip install pytest pytest-runner pytest-flask pytest-factoryboy factory_boy
$ pytest
docker-compose
和 Makefile
make tests
redis
| rabbitmq
地址使用wsgi服务启动
gunicorn
示例:$ pip install gunicorn
$ gunicorn myapi.wsgi:app
uwsgi
示例:$ pip install uwsgi
$ uwsgi --http 127.0.0.1:5000 --module myapi.wsgi:app
使用celery
$ celery worker -A myapi.celery_app:app --loglevel=info
[tasks]
. myapi.tasks.example.dummy_task
>>> from myapi.tasks.example import dummy_task
>>> result = dummy_task.delay()
>>> result.get()
‘OK‘
celery extension
:>>> from myapi.extensions import celery
>>> celery.send_task(‘myapi.tasks.example.dummy_task‘).get()
‘OK‘
使用Docker
$ docker build -t myapp .
$ docker run --env-file=.flaskenv myapp myapi init
$ docker run --env-file=.flaskenv -p 5000:5000 myapp myapi run -h 0.0.0.0
* Serving Flask app "myapi.app:create_app" (lazy loading)
* Environment: development
* Debug mode: on
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 214-619-010
$ docker-compose up -d
$ docker ps
$ docker exec -it
docker-compose
和 Makefile
启动make init
Makefile 命令
make init # 初始化环境
make build # 构建镜像
make run # 启动镜像
make db-migrate # 迁移数据
make db-upgrade # 数据映射到数据库
make test # 执行测试
使用Swagger
http://localhost:5000/swagger-ui
config.py
文件进行配置:
文章标题:快速创建Flask Restful API项目
文章链接:http://soscw.com/index.php/essay/63052.html