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
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 theinvalid_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 thekey_missing_code
, and if the type is not correct, abort theinvalid_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 withkey_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 abortvalidation_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>}
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
-
class
flask_validation.fields.
FloatField
(min_value=None, max_value=None, **kwargs)[source]¶ Bases:
flask_validation.fields.NumberField
Float field class
-
class
flask_validation.fields.
IntField
(min_value=None, max_value=None, **kwargs)[source]¶ Bases:
flask_validation.fields.NumberField
Int field class
-
class
flask_validation.fields.
ListField
(min_length: int = None, max_length: int = None, **kwargs)[source]¶ Bases:
flask_validation.fields._BaseField
List field class
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 |