Cerberusとは
- Pythonのオープンソースバリデーションライブラリ。
- 公式
準備
pip install cerberus
利用方法
基本的な使い方
from cerberus import Validator
# バリデーション対象パラメータのスキーマ定義し、バリデーターにセット
schema = {'name': {'type': 'string'}, 'age': {'type': 'integer', 'min': 10}}
v = Validator(schema)
request_body = {'name': 'Little Joe', 'age': 5}
# バリデーション実行
v.validate(request_body)
>> False
# エラー理由
v.errors
>> {'age': ['min value is 10']}
未定義のパラメータを許容する場合
v.allow_unknown = True
独自ルールでバリデーションを行いたい場合
- リクエストボディに指定されたメールアドレスに対して正規表現でバリデーションを行う場合。
- 独自定義バリデータークラス:
extendedValidator.py
import re
from cerberus import Validator
class ExtendedValidator(Validator):
def _validate_email(self, email_address, field, value):
if (email_address and not re.match('^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$', value)):
self._error(field, 'invalid_email_address')
- バリデータにセットするスキーマ定義クラス:
const.py
- メールアドレスの基本バリデーションルールを定義する。
# setter制御用メタクラス
class ConstMeta(type):
def __setattr__(self, name, value):
if name in self.__dict__:
raise self.ConstError()
self.__dict__[name] = value
# スキーマ定数定義
class ValidatorConstClass(metaclass=ConstMeta):
req_schema = {
'email_address': {
'type': 'string',
'required': True,
'empty': False,
'maxlength': 128,
'valid_email': True
}
}
- バリデーション処理実行クラス:
test.py
import const
from extendedValidator import ExtendedValidator
...
# 独自定義したバリデーターをセット
validator = ExtendedValidator(const.ValidatorConstClass.req_schema)
# バリデーション実行
if not validator.validate(req_body):
return {'result': 'validation_error', 'errors': validator.errors}