python快速生成restful接口

既然rest接口已经是统一规范了,为什么还要重复给每个资源写增删改查的逻辑呢。
于是我做了flask-sqlalchemy-rest,根据数据模型生成rest接口的库。

项目主要依赖了flask和sqlalchemy库,调用一个函数就能够给数据表生成规范的rest接口,简单又快速。

安装

1
ruby复制代码$ pip install flask_sqlalchemy_rest

示例代码,新建main.py,内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
python复制代码from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_sqlalchemy_rest import Rest

# 创建一个flask应用
app = Flask(__name__)

# 配置sqlite数据库路径
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///example.sqlite"

# 创建SQLAlchemy对象
db = SQLAlchemy(app)

# 创建flask_sqlalchemy_rest对象
rest = Rest(app, db)

# 定义一个用户表
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name= db.Column(db.String)
age = db.Column(db.Integer)

# 生成数据库表结构
with app.app_context():
db.create_all()

# 给用户表绑定rest接口
rest.add_model(User)

# 运行flask应用
app.run()

运行代码

1
css复制代码python main.py

自动创建了以下几个接口

请求方法 url 成功返回json 描述
GET http://127.0.0.1:5000/api/user {“code”: 200, “msg”: “OK”, “data”: { list”: [{},{}], “page”: 1,”page_size”: 10,”total”: 2 }} 获取所有用户
GET http://127.0.0.1:5000/api/user/<user_id> {“code”: 200,”msg”: “OK”,”data”: {}} 获取指定id用户
POST http://127.0.0.1:5000/api/user {“code”: 200,”msg”: “OK”,”data”: {“id”:1}} 增加一个用户
PUT http://127.0.0.1:5000/api/user/<user_id> {“code”: 200,”msg”: “OK”,”data”: {“id”:1}} 修改指定id用户
DELETE http://127.0.0.1:5000/api/user/<user_id> {“code”: 200,”msg”: “OK”,”data”: {}} 删除指定id用户

GET请求中可以添加参数进行筛选、分页、排序等
示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
csharp复制代码 // 获取姓名为tony、年龄为20的所有用户
[GET] http://127.0.0.1:5000/api/user?name=tony&age=20

// 获取所有用户,每页20个,第2页
[GET] http://127.0.0.1:5000/api/user?_page=2&_page_size=20

// 获取年龄大于20的所有用户
[GET] http://127.0.0.1:5000/api/user?age:gt=20
// 操作符gt(greter than),更多操作符可在github文档中查看

// 获取名字包含ton字符的所有用户
[GET] http://127.0.0.1:5000/api/user?name:ct=ton

// 获取所有用户,按年龄倒序
[GET] http://127.0.0.1:5000/api/user?_sort=age&_desc=1

添加身份验证

1
2
python复制代码# 创建flask_sqlalchemy_rest对象时,添加到auth_decorator参数
rest = Rest(app, db, auth_decorator=yout_auth_func)

更多文档在Github: github.com/qf0129/flas…

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%