marshmallowライブラリの@post_loadってどう使うんですか?
marshmallowでschemaを読み込んだ際の挙動
を定義するために使われるぞ。
✔️ 本記事のテーマ
marshmallowライブラリの@post_loadについて
✔️ 読者さんへの前置きメッセージ
本記事は「marshmallowライブラリの@post_load」について書いています。
この記事を読むことで
「marshmallowのschemaを読み込んだときの挙動の定義」
について理解できます。
marshmallowはschema定義用のPythonライブラリです。
marshmallowライブラリでは@post_loadを使うことで、
schemaを読み込んだときの挙動を定義することができます。
本記事では、そんなmarshmallowの@post_loadについて解説していきます。
それでは、解説していきましょう。
marshmallowの@post_loadとは?
一言で説明すると、schemaを読み込んだときの挙動の定義です。
@post_load によって
「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}
ここまでは通常のmarshmallowによるschema定義です。
ここで、先ほどのschema定義に@post_loadによるロジック定義を加えてみます。
from marshmallow import Schema, fields, post_load
class ParsonSchema(Schema):
name = fields.Str()
age = fields.Int()
@post_load
def int2str(self, data, **kwargs):
data['age'] = str(data['age']) + '歳'
return data
このschema定義にすることで、
@post_loadによって、JSONを読み込んだ際に age の項目に「歳」がつけられます。
data = ParsonSchema().load({"name": "Taro", "age": 20})
print(data)
# {'name': 'Taro', 'age': '20歳'}
このように、@post_loadをつけることで、schema読み込み時の挙動を定義することができます。
他にも、schema読み込み時、自動的に項目を追加することなどもできます。
from marshmallow import Schema, fields, post_load
class ParsonSchema(Schema):
name = fields.Str()
age = fields.Int()
@post_load
def add_key(self, data, **kwargs):
data['nationality'] = 'Japanese'
return data
data = ParsonSchema().load({"name": "Taro", "age": 20})
print(data)
# {'name': 'Taro', 'age': 20, 'nationality': 'Japanese'}
読み込んでいる JSON には name , age の2項目しかないのに、
読み込んだ後の data には name , age に加えて nationality の項目が定義されています。
marshmallow(Pythonライブラリ)とは?
そもそもmarshmallowとは何なのでしょうか?
marshmallowはschema定義用のPythonライブラリです。
marshmallowを使うことで、
schemaを定義してPython型以外のデータ(例えば、JSONなど)を読み込むことができます。
marshmallowを使えば、
JSONの階層的なデータ構造をそのままPythonへ読み込むことができます。
marshmallowの具体的な使い方については
「marshmallowの使い方【Pythonライブラリ】」の記事で解説しています。
marshmallowの便利なオプション
marshmallowには便利ないくつかのオプションがあります。
- required
- allow_none
- missing
- validation
ざっと解説しましょう。
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オプションの使い方」の記事に書いています。
validateオプション
データを読み込む際のValidationをつけるオプションです。
Validationの条件を指定します。
例えば、以下のように書くことで、dayは1~31の範囲の値のみ受け付けるようにしています。
day = fields.Int(validate=Range(min=1, max=31))
なお、validateオプションの詳しい解説は
「marshmallowのvalidateオプションの使い方」の記事に書いています。
marshmallowやPythonについてスキルをつけるなら
marshmallowの@post_loadについて解説しました。
Pythonをでは、様々なライブラリを使うことでより強力なことをできるようになります。
Pythonについてさらにスキルをつけるなら以下の書籍がオススメです。
この書籍は Python の基本的な言語仕様から標準ライブラリの使い方までを詳しく、
そして分かりやすく解説しています。
Pythonの初心者だけでなく、
Pythonが使える人が改めてPythonのスキルを整理するのにも最適な一冊と言えるでしょう。
Amazon 上で試し読みもできるのでぜひ一読してみて下さい。
また、Pythonについて基礎から学ぶのであれば、オンラインスクールも良いでしょう。
オンラインスクールで学習すると、講義も分かりやすく、
サポート体制もしっかりしています。
オンラインで無料レッスンを体験することもできるので、
自分にあっているかどうかを確かめることができます。
オススメは以下の3つです。
どのスクールも無料体験が用意されているので、
契約前に自分に最適なスクールを探すことができるでしょう。
✔️オススメのプログラミングスクール ベスト3
- 未経験からIT業界へ転職なら【DMM WEBCAMP】
※ROLANDさんがプロモーターを務める有名スクールです。無料体験の内容も充実していて人気です。 - プログラミングのオンラインスクールCodeCamp
※ここも有名なスクールです。サポート体制がしっかりしているので安心です。 - 3ヶ月間のプログラミングスクール【Tech Boost】
※比較的新しいスクールですが、そのクオリティの高さから伸びてきているスクールです。
プログラミングスクールについては「プログラミングスクールで失敗しないためには【オススメベスト3も紹介】」の記事でも紹介しています。
気になった方はぜひチェックしてみて下さい〜!
コメント