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


更多文章
  • 网络编程所需要熟悉的那些函数
  • DNSCrypt简明教程
  • SQLAlchemy简明教程
  • 这些年,我们错过的n个亿
  • 给Linux用户的FreeBSD快速指南
  • 旧电脑也不能闲着:家用备份方案
  • 将SQLite的数据迁移到MySQL
  • Linux托管Windows虚拟机最佳实践
  • 为什么gRPC难以推广
  • 关于ORM的思考
  • MySQL指定使用索引(使用索引提示)
  • QT5使用GTK主题
  • 搭建samba服务器
  • ssh时自动运行tmux
  • ufw简明教程