Pythonのバリデーションライブラリ「Cerberus」のよく使うバリデーションルールをまとめてみた
概要
CX事業本部の佐藤です。現在携わっている案件では、PythonのバリデーションライブラリのCerberusを導入しています。今回は、実際の開発でよく使うであろうバリデーションをまとめてみました。
Cerberusとは
Pythonのオープンソースのバリデーションライブラリです。pythonの dict
や list
の各属性に対してのバリデーションを簡単に行うことができます。
リポジトリは以下です。
https://github.com/pyeve/cerberus
ドキュメントは以下です。
https://docs.python-cerberus.org/en/stable/index.html
基本的な使い方
以下は、型のバリデーションのサンプルです。
v = Validator({'name': {'type': 'string'}}) v.validate({'name': 'john doe'}) # True v.validate({'name': 1}) # False
実際によく使うバリデーション
個人的によく使いそうだなと思われるバリデーションをまとめてみました。
type
型のバリデーション行います。
string
v = Validator({'name': {'type': 'string'}}) v.validate({'name': 'hoge'}) # True v.validate({'name': 1}) # False
integer
v = Validator({'id': {'type': 'integer'}}) v.validate({'id': 1}) # True v.validate({'id': 'hoge'}) # False
boolean
v = Validator({'is_hoge': {'type': 'boolean'}}) v.validate({'is_hoge': True}) # True v.validate({'is_hoge': 'hoge'}) # False
dict
schema = { 'info': { 'type': 'dict', 'schema': { 'id': { 'type': 'integer' }, 'value': { 'type': 'string' } } } } v = Validator(schema) v.validate({'info': {'id': 1, 'value': 'hoge'} }) # True v.validate({'hoge': {'id': 1, 'value': 'hoge'} }) # False v.validate({'info': {'id': 1, 'hoge': 'hoge'} }) # False
required
必須属性をバリデーションします。
schema = { 'id': { 'type': 'integer', 'required': True }, 'value': { 'type': 'string', 'required': False } } v = Validator(schema) v.validate({'id': 1, 'value': 'hoge'}) # True v.validate({'id': 1 }) # True v.validate({'value': 'hoge'}) # False
allowed
キーバリューとして、許可する値をバリデーションします。
schema = { 'value': { 'type': 'string', 'allowed': ['hoge', 'fuga'] } } v = Validator(schema) v.validate({'value': 'hoge'}) # True v.validate({'value': 'fuga'}) # True v.validate({'value': 'piyo'}) # False
dependencies
ある属性に依存する場合のバリデーションを行います。
以下では、 hoge
, fuga
属性が存在するときのみ piyo
が有効になるバリデーションです。
schema = { 'hoge': {'required': False}, 'fuga': {'required': False}, 'piyo': {'required': False, 'dependencies': ['hoge', 'fuga']} } v = Validator(schema) v.validate({'hoge': 'hoge'}) # True v.validate({'fuga': 'fuga'}) # True v.validate({'piyo': 'piyo'}) # False v.validate({'hoge': 'hoge', 'piyo': 'piyo'}) # False v.validate({'hoge': 'hoge', 'fuga': 'fuga', 'piyo': 'piyo'}) # True
empty
空白のバリデーションを行います。
schema = { 'hoge': { 'type': 'string', 'empty': False } } v = Validator(schema) v.validate({'hoge': ''}) # False
min, max
typeが integer
, float
, number
の場合に、最小値、最大値のバリデーションを行います。
schema = { 'hoge': { 'type': 'integer', 'min': 0, 'max': 100 } } v = Validator(schema) v.validate({'hoge': 1}) # True v.validate({'hoge': 100}) # True v.validate({'hoge': -1}) # False v.validate({'hoge': 101}) # False
minlength, maxlength
typeが string
の場合に、最小文字数、最大文字数のバリデーションを行います。
schema = { 'hoge': { 'type': 'string', 'minlength': 2, 'maxlength': 10 } } v = Validator(schema) v.validate({'hoge': 'hoge'}) # True v.validate({'hoge': 'h'}) # False v.validate({'hoge': 'hogehogehoge'}) # False
nullable
値がNoneを許可するかどうかのバリデーションを行います。
schema = { 'hoge': { 'type': 'string', 'nullable': True }, 'fuga': { 'type': 'string', 'nullable': False } } v = Validator(schema) v.validate({'hoge': 'hoge'}) # True v.validate({'hoge': None}) # True v.validate({'fuga': None}) # False
まとめ
よく使いそうなバリデーションをまとめてみました。他にも、便利な組込バリデーションルールや、自分でカスタムバリデーションを作成することもできます。