结合Flask 与 marshmallow快速进行参数校验

在Flask里如何方便快速的进行参数校验呢?如下,我们通过组合Flask提供的工具函数,以及marshmallow,来完成一个方便快捷的参数 校验函数。

from flask import abort, make_response, jsonify
from marshmallow import Schema, fields, ValidationError


def check_data(schema, data):
    try:
        return schema().load(data)
    except ValidationError as e:
        abort(make_response(jsonify(code=400, message=str(e.messages), result=None), 400))


class ReportSchema(Schema):
    app_type = fields.Int(missing=0)
    app_version = fields.Str(required=True)
    model = fields.Str(missing="Unknow")
    os_type = fields.Int(required=True)
    os_version = fields.Str(required=True)

使用的时候,就只需要导入Schema和 check_data 函数,例如:

from flask import request

from schemas import (
    check_data,
    ReportSchema,
)

@app.route("/")
def get_report():
    qs_dict = check_data(ReportSchema, request.args)
    pass

@app.route("/report", methods=["POST"])
def report():
    json_dict = check_data(ReportSchema, request.get_json())
    pass

这样如果参数不满足的话,就会自动返回400,并且将错误信息打印在返回的JSON里,而且不用手动return,通过abort函数,自动终止 流程。

如果参数满足的话,则会通过 check_data 函数返回,之后则只需要使用即可。


更多文章
  • JavaScript权威指南笔记
  • Python零碎知识汇总
  • C语言的位操作
  • 分治
  • 关于python的decorator和descriptor
  • 程序设计实践笔记
  • Thinking Recursively
  • Block I/O
  • 如何解读c的声明
  • 关于输入法的猜想
  • C语言与抽象思维
  • C注意事项
  • C语言中点操作符(.)和箭头操作符(->)的不同之处
  • 征服C指针笔记 - 数组和指针的微妙关系
  • 关于文件权限的摘记