结合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 函数返回,之后则只需要使用即可。


微信公众号
关注公众号,获得及时更新

更多文章
  • 使用Dropbox来备份服务器文件
  • 《计算机网络-系统方法》读书笔记
  • Y Combinator《如何创业》笔记
  • Go类型嵌套
  • etcd源码阅读与分析(五):mvcc
  • etcd源码阅读与分析(四):lease
  • 干了这碗叔本华牌毒鸡汤 --- 《人生的智慧》
  • etcd源码阅读与分析(三):wal
  • Memory leak in net/http
  • etcd源码阅读与分析(二):raft
  • etcd源码阅读与分析(一):raftexample
  • 虚拟机里的Ubuntu sudo时卡住
  • Go访问私有变量
  • Raft论文阅读笔记
  • 避免全局变量