marshmallowの@post_loadの使い方

marshmallowの@post_loadの使い方Marshmallow
ゆうすけ
ゆうすけ

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とは?

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 には nameage に加えて nationality の項目が定義されています。

 

marshmallow(Pythonライブラリ)とは?

marshmallow(Pythonライブラリ)とは?

そもそもmarshmallowとは何なのでしょうか?

 

marshmallowはschema定義用のPythonライブラリです。

 

marshmallowを使うことで、
schemaを定義してPython型以外のデータ(例えば、JSONなど)を読み込むことができます。

 

marshmallowを使えば、
JSONの階層的なデータ構造をそのままPythonへ読み込むことができます。

 

marshmallowの具体的な使い方については
marshmallowの使い方【Pythonライブラリ】」の記事で解説しています。

 

marshmallowの便利なオプション

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やPythonについてスキルをつけるなら

marshmallowの@post_loadについて解説しました。

 

Pythonをでは、様々なライブラリを使うことでより強力なことをできるようになります。

 

Pythonについてさらにスキルをつけるなら以下の書籍がオススメです。

 

この書籍は Python の基本的な言語仕様から標準ライブラリの使い方までを詳しく、
そして分かりやすく解説しています。

Pythonの初心者だけでなく、
Pythonが使える人が改めてPythonのスキルを整理するのにも最適な一冊と言えるでしょう。

Amazon 上で試し読みもできるのでぜひ一読してみて下さい。

 

また、Pythonについて基礎から学ぶのであれば、オンラインスクールも良いでしょう。

 

オンラインスクールで学習すると、講義も分かりやすく、
サポート体制もしっかりしています。

 

オンラインで無料レッスンを体験することもできるので、
自分にあっているかどうかを確かめることができます。

 

オススメは以下の3つです。
どのスクールも無料体験が用意されているので、
契約前に自分に最適なスクールを探すことができるでしょう。

✔️オススメのプログラミングスクール ベスト3

プログラミングスクールについては「プログラミングスクールで失敗しないためには【オススメベスト3も紹介】」の記事でも紹介しています。

 

気になった方はぜひチェックしてみて下さい〜!

コメント

タイトルとURLをコピーしました