# 环境介绍 : win10 + python3.7 +flask
# 要注意几个点 请求方式 , 序列化方式, 入参的处理
# 下面设置路由和参数
from flask_restful import Api
api = Api() # 初始化api对象
def init_api(app):
api.init_app(app) # 在项目初始化的地方传入app 对象
api.add_resource(HelloResource, '/hello/') # HelloResource api所在的类名 hello 路由地址
# 请求方式localhost:5000/hello/
api.add_resource(GoodsListResource, "/goods/")
api.add_resource(GoodsResource, "/goods/<int:id>/", endpoint="single_goods")
# 具体的类和函数,可以理解成java中的控制器
from flask_restful import Resource, fields, marshal_with, marshal, abort, reqparse
goods_fields = {
"id": fields.Integer,
"name": fields.String(attribute='g_name'), # key 跟字段名字不一样就需要配置属性进行关联映射
"g_price": fields.Float,
'uri': fields.Url('single_goods', absolute=True)
}
multi_goods_fields = {
"status": fields.Integer, #
"msg": fields.String,
"data": fields.List(fields.Nested(goods_fields)), # 返回多个的使用集合嵌套单个对象的字段值
"desc": fields.String(default='success'),
"number":fields.Integer
}
class GoodsListResource(Resource):
def get(self):
print('执行到这里憨憨')
goods_list = Goods.query.all() # 查询所有的数据返回
data = {
"status": 200,
"msg": "ok",
"data": goods_list, # 当前是对象返回会报错序列化错误
'desc': "Get Ok"
}
# return data # 这个会报错
return marsgal(date,multi_goods_fields) # multi_goods_fields 这个是序列化参数的返回格式
# 第二种序列化方式 在函数上面使用 @marshal_with(对象的字段字典)
@marshal_with(multi_goods_fields)
def get(self):
print('执行到这里憨憨')
goods_list = Goods.query.all() # 查询所有的数据返回
data = {
"status": 200,
"msg": "ok",
"data": goods_list, # 当前是对象返回会报错序列化错误
'desc': "Get Ok"
}
return data