代码库地址
https://code.aliyun.com/daimingzhuang/flask-restful.git
目录结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| . ├── README.md # 说明文件 ├── config.yml # 全局配置文件 ├── foo.db # 测试用的SQLite数据库,可以删掉 ├── resources # RESTful资源目录 │ ├── BaseResource.py # 定义了几个资源的基类,通用的CRUD接口,并实现了列表的条件查询、排序和分页。 │ ├── IndexResource.py # 示例主页,可以删掉 │ ├── TokenResource.py # Token示例,用来查询登录(GET)、登录(POST)、登出(DELETE),可根据实际情况改写 │ ├── UserResource.py # 用户资源示例 │ └── __init__.py # 统一绑定资源到URI ├── rest_server.py # 服务器主程序 └── utils ├── __init__.py ├── common.py # 定义了一些通用的工具 ├── config.py # 读取全局配置文件 ├── db.py # 数据库模型定义、关系映射等 ├── db_base.py # SQLAlchemy ORM 框架基类 ├── logger.py # 日志 ├── mutex.py # 基于Redis的跨进程锁,实现了互斥锁和读写锁 ├── redis_pool.py # Redis连接池 └── redis_session.py # 基于Redis的HttpSession
|
环境依赖
python3
pip3 install -r requirements.txt
1 2 3 4 5
| flask flask-restful sqlalchemy redis pyyaml
|
开发指南
根据项目情况配置 config.yml
修改 utils/db.py
,对数据模型(即数据库的表)进行定义。
在 resources
下新建资源,继承 BaseResource
中的某个基类,有需要时可重写get/post/put/delete方法实现自定义的业务逻辑。
在 resources/__init__.py
中添加资源的URI映射。
utils文件夹除了db.py,其他代码通用性都比较强,一般都只需使用无需修改。
resources文件夹除了BaseResource.py,其他代码可以认为都是示例,应该根据需要修改和删除。
httpsession存储在redis服务器中,前端的登录标识通过登录返回的header中的token字段和数据的{“data”: {“token”: “xxx”}}同时返回,前端后续的请求应该在header携带token字段(或token参数)以表明身份,具体可以看后面的请求示例。
启动方式
开发环境
Linux上的生产环境
1
| gunicorn -b 0.0.0.0:8088 rest_server:app
|
请求示例
查询当前登录状态
1
| GET http://localhost:8088/Token
|
response text
1 2 3 4 5
| { "result_code": "fail", "err_code": "LOGIN_FAILED", "err_code_des": "用户未登录" }
|
登录
1 2
| POST http://localhost:8088/Token body {"username":"admin", "password":"123456"}
|
response text
1 2 3 4 5 6 7 8 9 10 11
| { "result_code": "success", "data": { "token": "66007530da1e424ba35006afad746fa9", "user": { "id": 1, "username": "admin", }, "create_time": 1651989903.466016 } }
|
查看登录后的测试主页
1 2
| GET http://localhost:8088/ header token: 66007530da1e424ba35006afad746fa9
|
response text
查询列表指定条件、分页、排序
1 2
| http://localhost:8088/Users?page=1&page_size=15&sort=username&order=asc&username_like=a%n header token: 66007530da1e424ba35006afad746fa9
|
response text
1 2 3 4 5 6 7 8 9 10 11 12 13
| { "result_code": "success", "data": [ { "id": 1, "username": "admin" } ], "total": 1, "page": 1, "page_size": 15, "page_num": 1 }
|
更多的查询条件使用方法,可以阅读 resources/BaseResource.py
中 ROPluralResource
类的 get
方法的源码