Flask 编写Restful 接口

# 环境介绍 : 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











 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值