3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Pythonライブラリ Cerberus によるバリデーション処理 メモ

Posted at

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}

参考情報

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?