marshmallowライブラリのvalidateオプションってどう使うんですか?
validateオプションをつけることで、
schemaで受けつけるデータの条件を定義できるぞ。
✔️ 本記事のテーマ
marshmallowライブラリのvalidateオプションについて
✔️ 読者さんへの前置きメッセージ
本記事は「marshmallowライブラリのvalidateオプション」について書いています。
この記事を読むことで
「validateオプションの使い方 や 受けつけるデータの条件定義」
について理解できます。
marshmallowはschema定義用のPythonライブラリです。
marshmallowライブラリでは、
各schemaに対して、その項目で受けつけるデータの条件を定義することができます。
本記事では、そんなmarshmallowのデータ条件定義について解説していきます。
それでは、解説していきましょう。
marshmallowのvalidateオプションとは?
一言で説明すると、schemaで受けつけるデータの条件定義です。
schemaで対象項目にvalidateオプションをつけることで
データを読み込む際に対象項目の値の条件を定義できます。
例えば、
0未満が入ってきたとき、1~31以外の数字が入ってきたとき、100以上が入ってきたとき…
など任意の条件でvalidation errorを発生させることができます。
marshmallowのvalidateオプションの使い方
実際にmarshmallowのvalidateオプションを使ってみましょう。
validate=条件
とすることで対象項目に対して、受けつけ条件を定義することができます。
試しに、marshmallowで以下のようなschema定義をしましょう。
from marshmallow import Schema, fields
class ParsonSchema(Schema):
name = fields.Str()
age = fields.Int()
このschemaは name, age という2項目をschemaとしてデータを読み込みます。
このようなschemaを定義することで、次のようにJSONを読み込むことができます。
data = ParsonSchema().load({"name": "Taro", "age": 20})
print(data)
# {'name': 'Taro', 'age': 20}
ただ、このままでは例えばage=-1というようなデータも読み込むことができます。
data = ParsonSchema().load({"name": "Taro", "age": -1})
print(data)
# {'name': 'Taro', 'age': -1}
現実的に「-1歳」なんて年齢は存在しえないので、
schema定義の’age’の項目に、validateオプションによる条件をつけてみます。
from marshmallow import Schema, fields
from marshmallow.validate import Range
class ParsonSchema(Schema):
name = fields.Str()
age = fields.Int(validate=Range(min=0))
こうすることで、ageが0未満の場合にvalidation errorが発生します。
data = ParsonSchema().load({"name": "Taro", "age": -1})
# marshmallow.exceptions.ValidationError: {'age': ['Must be greater than or equal to 0.']}
このように、
validateオプションをつけることで、対象項目の受けつけ条件を定義することができます。
marshmallowのvalidateオプションの様々な条件指定
validateオプションでは様々な方法で条件を指定することができます。
その例を紹介しておきましょう。
- 最小値を定義する
- 最大値を定義する
- XXからXXまでを定義する
- 境界値をNGとするかOKとするかを定義する
最小値を定義する
marshmallowのvalidateオプションの使い方でも解説したように、
validateオプションを使うことで最小値を定義することができます。
age = fields.Int(validate=Range(min=0))
最大値を定義する
最小値と同じように、
validateオプションで最大値を定義することもできます。
age = fields.Int(validate=Range(max=100))
XXからXXまでを定義する
最小値定義と最小値定義を組み合わせることで、範囲を指定することもできます。
例えば、月を定義する際は1月~12月までしかないのでその範囲で条件付けすると良いでしょう。
month = fields.Int(validate=Range(min=1, max=12))
境界値をNGとするかOKとするかを定義する
ここまで紹介してきたmin/maxですが、
これらの境界値を範囲に含めるかどうかを定義することもできます。
age = fields.Int(validate=Range(min=0, min_inclusive=False))
このようにすることで、
「最小値を定義してその最小値はOK条件に含めない(=0以下だとvalidation error)」
とすることができます。
逆に、最大値をOK条件に含めない(=100以上だとvalidation error)ようにするには
以下のように書きます。
age = fields.Int(validate=Range(max=100, max_inclusive=False))
marshmallowのその他のオプション
marshmallowには他にもいくつかのオプションがあります。
- required
- allow_none
- missing
ざっと解説しましょう。
requiredオプション
対象項目を必須とするかどうかのオプションです。
Trueの場合、対象項目は必須となり、対象項目が存在しないデータを読み込むとerrorが発生します。
Falseの場合、対象項目が欠けていてもerrorになりません。
デフォルトではFalseになっています。
なお、requiredオプションの詳しい解説は
「marshmallowのrequiredオプションの使い方」の記事に書いています。
allow_noneオプション
null値を許可するかどうかのオプションです。
Trueの場合、nullを許可し、Falseの場合、nullが入ってきたらvalidation errorが発生させます。
デフォルトではFalseになっています。
なお、allow_noneオプションの詳しい解説は
「marshmallowのallow_noneオプションの使い方」の記事に書いています。
missingオプション
対象項目がなかった場合に、どのような値で埋めるかを指定するオプションです。
‘missing=0’ や ‘missing=None’ というように値を渡して使います。
なお、 ‘missing=True’ のとき、 ‘required=False’ でないと動かしたときerrorが発生します。
(当然といえば当然ですね)
なお、missingオプションの詳しい解説は
「marshmallowのmissingオプションの使い方」の記事に書いています。
marshmallow(Pythonライブラリ)とは?
そもそもmarshmallowとは何なのでしょうか?
marshmallowはschema定義用のPythonライブラリです。
marshmallowを使うことで、
schemaを定義してPython型以外のデータ(例えば、JSONなど)を読み込むことができます。
marshmallowを使えば、
JSONの階層的なデータ構造をそのままPythonへ読み込むことができます。
marshmallowの具体的な使い方については
「marshmallowの使い方【Pythonライブラリ】」の記事で解説しています。
marshmallowやPythonについてスキルをつけるなら
marshmallowを使ったPythonでJSONデータ読み込む方法について解説しました。
Pythonをマスターすると様々なことがプログラムでできるようになります。
Pythonを深く網羅的に学ぶためには以下の書籍がオススメです。
この書籍はPythonについてかなり深く、そして丁寧に書かれています。
Python の基本文法だけでなく、
いかにして Python の持つ力を最大限引き出せるかという視点で書かれています。
Python 初心者はもちろん、すでに Python を使える方にもオススメの一冊です。
エンジニアとしての自身の価値をチェックする(完全無料)
エンジニアとして、
自分の価値がどれくらいのものかご存知でしょうか?
エンジニアとしてIT業界に身を置いていると
今の会社でずっと働くのか、フリーランスとして独立するのか …
と様々な選択肢があります。
どの選択肢が正解なのかを見極めるためにも、選択肢を広げるためにも
自身の価値を知っておくことはとても重要です。
TechClips ME では、
職務経歴書をアップロードするだけで企業からのスカウトを受けることができます。
▼▼▼▼▼
▲▲▲▲▲
しかもTechClips MEでは想定年収を企業から提示してくれるので、
自身の価値を数字で分かりやすくたしかめることができます。
登録はもちろん完全無料なので、一度登録してみると良いかもしれません。
コメント