restful

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)
上一篇:MySQL学习中的DQL的语法知识5(分组查询)


下一篇:C# 调用C++结构体