• wanli's avatar
    update · e339fd7a
    wanli authored
    e339fd7a
__init__.py 968 Bytes
import functools

from flask import request
from marshmallow import Schema, ValidationError

from fullstack.response import ResponseCode, response_result
from app.setting import config

def validate_schema(schema_class: Schema):
    def decorator(view_func):
        @functools.wraps(view_func)
        def inner(*args, **kwargs):
            if request.method == 'GET':
                form_data = request.args
            else:
                if request.json:
                    form_data = request.json
                else:
                    form_data = request.form
            try:
                data = schema_class().load(form_data)
                request.schema_data = data
            except ValidationError as e:
                if config['DEBUG']:
                    return response_result(ResponseCode.PARAMETER_ERROR, e.messages if config['DEBUG'] else None)
            return view_func(*args, **kwargs)
        return inner
    return decorator