Welcome to Flask-Validation’s documentation!

Pythonic JSON payload validator for requested JSON payload of Flask

Flask를 위한 view decorator 기반의 JSON 요청 데이터 validation 라이브러리. Flask Large Application Example에서 직접 구현해 사용하 던 몇 가지 view decorator에서 출발했고, MongoEngine의 설계에 영향을 받았습니다.

Usages

json_required

from flask import Flask
from flask_validator import json_required, Validator

app = Flask(__name__)
Validator(app)


@json_required()
@app.route('/', methods=('POST'))
def index():
    return 'hello!'

validate_keys

from flask import Flask
from flask_validator import validate_keys, Validator

app = Flask(__name__)
Validator(app)


@validate_keys(['name', 'age', {'position': ['latitude', 'longitude']}])
@app.route('/', methods=('POST'))
def index():
    return 'hello!'

validate_common

from flask import Flask
from flask_validator import validate_common, Validator

app = Flask(__name__)
Validator(app)


@validate_common({'name': str, 'age': int, 'position': {'latitude': float, 'longitude': float}})
@app.route('/', methods=('POST'))
def index():
    return 'hello!'

validate_with_fields

from flask import Flask
from flask_validator import validate_with_fields
from flask_validator import StringField, IntField
from flask_Validator import Validator

app = Flask(__name__)
Validator(app)


@validate_with_fields({
    'name': StringField(allow_empty=False, regex='[가-힇]+'),
    'age': IntField(min_value=0),
    'position': {
        'latitude': FloatField(min_value=-90, max_value=90),
        'longitude': FloatField(min_value=-180, max_value=180)
    }
})
@app.route('/', methods=('POST'))
def index():
    return 'hello!'

validate_with_jsonschema

from flask import Flask
from flask_validator import validate_with_jsonschema, Validator

app = Flask(__name__)
Validator(app)


@validate_with_jsonschema({
    'type': 'object',
    'properties': {
        'name': {'type': 'string'},
        'age': {'type': 'number'}
    }
})
@app.route('/', methods=('POST'))
def index():
    return 'hello!'

API documentation

Configuring Flask-Validation

class flask_validation.validator.Validator(app=None)[source]

Bases: object

Create the Validator instance to register config. You can either pass a flask application in directly here to register this extension with the flask app, or call init_app after creating this object (in a factory pattern). :param app: A flask application

init_app(app)[source]

Decorators

flask_validation.decorators.json_required()[source]

A decorator to check header type is application/json

if you decorate endpoint with this, it will ensure that the request has a valid payload type before access endpoint if header’s content type is not application/json, abort the invalid_content_type_abort_code

flask_validation.decorators.validate_common(key_type_mapping: dict)[source]

A decorator to check request payload keys and type

If the request payload does not include the key in key_type_mapping, abort the key_missing_code, and if the type is not correct, abort the invalid_type_code.

Nested JSON processing is possible by inserting the dictionary in the required_keys like this {'a': str, 'b': int, 'c': {'d': int, 'e': str}}

Parameters:key_type_mapping – A dictionary for payload check with this form {<key name>: <type class>}
flask_validation.decorators.validate_keys(required_keys)[source]

A decorator to check request payload keys

if you decorate endpoint with this, it will ensure that the request’s json body includes ‘required_keys’. if request body didn’t includes required_keys , abort with key_missing_abort_code

Nested JSON processing is possible by inserting the dictionary in the required_keys like this ['a', 'b', {'c': ['q' ,'z']}]

Parameters:required_keys – key list to check request body’s JSON
flask_validation.decorators.validate_with_fields(key_field_mapping: dict)[source]

A decorator to check request payload with Field classes in fields.py

If the request payload does not include the key in key_type_mapping, abort key_missing_code and abort validation_failure_code if field validation fails.

Nested JSON processing is possible by inserting the dictionary in the required_keys like this {'a': StringField(allow_empty=False), 'b': IntField(min_value=0), 'c': {'d': BooleanField()}}

Parameters:key_field_mapping – A dictionary for payload check with this form {<key name>: <field class>}
flask_validation.decorators.validate_with_jsonschema(jsonschema: dict)[source]

A decorator to check request payload with jsonschema

If validation fails(jsonschema.exceptions.ValidationError raised), abort the validation_error_abort_code.

Parameters:jsonschema – jsonschema

Fields

class flask_validation.fields.BooleanField(validator_function=None, enum=None, required: bool = True, allow_null: bool = False)[source]

Bases: flask_validation.fields._BaseField

Boolean field class

validate(value)[source]
class flask_validation.fields.FloatField(min_value=None, max_value=None, **kwargs)[source]

Bases: flask_validation.fields.NumberField

Float field class

validate(value)[source]
class flask_validation.fields.IntField(min_value=None, max_value=None, **kwargs)[source]

Bases: flask_validation.fields.NumberField

Int field class

validate(value)[source]
class flask_validation.fields.ListField(min_length: int = None, max_length: int = None, **kwargs)[source]

Bases: flask_validation.fields._BaseField

List field class

validate(value)[source]
class flask_validation.fields.NumberField(min_value=None, max_value=None, **kwargs)[source]

Bases: flask_validation.fields._BaseField

Number field class

validate(value)[source]
class flask_validation.fields.StringField(allow_empty: bool = True, min_length: int = None, max_length: int = None, regex=None, **kwargs)[source]

Bases: flask_validation.fields._BaseField

String field class

validate(value)[source]

Configuration Options

You can change many options for how this extension works via

app.config[OPTION_NAME] = new_options

Options:

INVALID_CONTENT_TYPE_ABORT_CODE default is 406
KEY_MISSING_ABORT_CODE default is 400
INVALID_TYPE_ABORT_CODE default is 400
VALIDATION_FAILURE_ABORT_CODE default is 400
VALIDATION_ERROR_ABORT_CODE default is 400

Indices and tables