1、Restful 是什么 ?
简单来说,Restful是一种应用程序架构风格。核心理念是,将网络上的一切事物当做资源,以资源为中心,使用AJAX之类的局部刷新技术,通过GET、POST、PUT、DELETE四种请求方法对资源进行调度,调度的结果返回的不再是HTML,而是数据!于是就成了我们口中常说的数据APi 。(包含个人看法,欢迎留言讨论)
四种请求的作用:
请求方式 | 作用 |
---|---|
GET | 获取资源 |
POST | 添加资源 |
PUT | 修改资源 |
DELETE | 删除资源 |
2、使用方法
在flask中,是通过flask-restful这个插件来实现Restful架构的。所以第一步是安装flask-restful
2.1 安装flask-restful
pip install flask-restful
2.2 创建并管理资源类
资源类一般是项目中涉及的实体,实例如下,创建 用户资源类:
- 创建
由于操作对象可能是多个或单个资源,所以一般建单数和复数两个资源类。
新建UserApi.py文件
from flask_restful import Resource
#单个资源类,一般用于 获取单个资源,修改资源、删除资源等操作
class UserResource(Resource):
def get(self,id=None):
'''业务逻辑'''
return '结果信息或返回数据'
def put(self,id=None):
pass
def delete(self,id=None):
pass
#复数资源类,一般用于 获取多个资源、添加资源等操作
class UsersResource(Resource):
def get(self):
pass
def post(self):
pass
- 管理
from flask_restful import Api
from APP.Api.UserApi import UserResource,UsersResource
api = Api()
#api初始化,app:当前应用对象
def init_api(app):
api.init_app(app=app)
'''添加资源,格式:(资源类,访问规则,允许的请求方法)'''
api.add_resource(UserResource,'/users/<string:id>',methods=['GET','PUT','DELETE']) #单数资源类
api.add_resource(UsersResource,'/users/',methods=['GET','POST']) #复数资源类
2.3 输入与输出定制
- 输入定制
通过reqparse对用户输入的数据进行定制,实例如下:
from flask_restful import reqparse
req = reqparse.RequestParser()
#输入定制 格式: (属性名,type=数据类型,required=是否必需,help=不符合要求时的提示信息)
req.add_argument('username',type=str,required=True,help='请输入用户名')
req.add_argument('password',type=str,required=True,help='请输入密码')
#用户请求后,在对应请求方法中获取数据
args = req.parse_args()
username = args.get('username')
password = args.get('password')
- 输出定制
通过field 和 marshal_with装饰器对返回的数据进行格式化定制,实例如下:
from flask_restful import fields, marshal_with
#输出定制
user_field = {
#格式: '用户看到的字段名称':fields.字段类型
'user_id':fields.String(attribute='id'),
#attribute:数据表中的真正字段名称
'username':fields.String(attribute='name'),
'pwd':fields.String(attribute='password'),
}
result_field = {
'returnStatus':fields.Integer,
#fields.List:列表 fields.Nested:关联数据
'returnValue':fields.List(fields.Nested(user_field))
}
class UserResource(Resource):
@marshal_with(result_field) #装饰器将数据与预定格式进行整合
def get(self,id=None):
users = User.query.all() #先用sqlalchemy创建用户模型User
data = {
'returnStatus':200,
'returnValue':users
}
return data
3、总结
- Restful架构的使用,使资源的管理更为清晰明了,便于后期维护
- 可见,使用Restful架构,后端接口全部返回的是数据,便于前后端分离
- 返回的数据自动转为JSON格式,便于前端解析
- 以上仅简单介绍了flask-restful的基本用法,详见:flask-restful使用手册