flask-restful
1.提供了RequestParser类,可以帮助我们校验和转换请求数据,它设计成提供简单并且统一的访问Flask.request对象里的任何变量的入口
请求解析:
def post(self):
parse = reqparse.RequestParser()
parse.add_argument('title', type=str, location=['form', 'json'], required=True, help='标题是必田')
parse.add_argument('praise', type=int, location=['form', 'json'], default=0, help='请输入合法值')
parse.add_argument('stock', type=int, location=['form', 'json'], default=0, help='请输入合法值')
args = parse.parse_args()
good = Goods(**args)
db.session.add(good)
try:
db.session.commit()
except SQLAlchemyError as e:
print(e)
return {
'msg': '添加失败'
}, 500
return {
'id': good.id,
'title': good.title,
'praise': good.praise,
'stock': good.stock,
}, 201
- 使用步骤
- 导入RequestParser类
- 实例化RequestParser对象
- 向RequestParser对象中添加需要检验或转换的参数声明
- 使用parse_args()方法启动检验处理
- 通过args.id或args['id']的方法获取参数
class MajorView(Resource):
def post(self):
parse = reqparse.RequestParser()
parse.add_argument('name', type=str, location=['form', 'json'], required=True, help='请输入正确的专业名')
name = parse.parse_args().get('name')
major = Major(name=name)
db.session.add(major)
try:
db.session.commit()
except:
return {'msg': '添加失败'}, 500
return {
'id': major.id,
'name': major.name,
}, 201
- 参数详解
- name:前端参数键名,与前端一致
- required:描述请求是否一定要携带该参数,默认为Flase,为Flase时不要求前端传递,此时取出值为None,可设置default值;设置为True时要求强制携带,若未携带,向客户端返回错误信息,状态码400
- help:参数检验错误时返回的错误描述信息
- action:对于请求体中出现多个同名参数时的处理方式,设置为store时,保留第一个,为默认值,设置为append时,以列表形式保存所有同名参数的值
- type:描述参数应该匹配的类型,可以使用python的标准数据类型string,int,也可使用Flask-RESTFful提供的检验方法,也可以自己校验
- 标准类型:str 或 int
- url,regex,natural,positive,in_range(low,high),boolean
- location: 描述参数应该在请求数据中的位置
- 请求体 from
- 查询参数 args
- 请求头 headers
- cookie cookie
- json数据 json
- 上传文件 files
- 也可以指定多个位置 location = ['from','json']
响应:
序列化数据:Flask-RESTful提供了marshal工具,可以将数据序列化为特定格式的字典数据,作为视图的返回值
- 使用marshal_with装饰器步骤
- 定义序列化字段
- 导入marshal_with装饰器
- 装饰器装饰视图类
定义序列化字段
from flask_restful import fields
resource_fields = {
'name': fields.String,
'age': fields.Integer,
}
导入装饰器和序列化字段
from flask_restful import marshal_with
from field import resource_fields
装饰器装饰视图类
class Index(Resource):
@marshal_with(resource_fields)
def get(self, **kwargs):
user = User('Jeremy', 18, '123456')
return user
- marshal方法序列化
- 定义序列化字段
- 导入marshal方法和序列化字段
- marshal方法序列化结果
定义序列化字段
from flask_restful import fields
resource_fields = {
'name': fields.String,
'age': fields.Integer,
}
导入marshal方法和序列化字段
from flask_restful import marshal
from field import resource_fields
marshal方法序列化结果
class Index(Resource):
def get(self, **kwargs):
user = User('Jeremy', 18, '123456')
# marshal()方法直接序列化数据
# user: 要序列化的数据
# resource_fields: 要序列化的字段
return marshal(user, resource_fields)