Django Rest Frameworkを学ぼう! ~シリアライズのバリデーションについて~

前回は、API Viewクラスについて学びました。

本記事では、シリアライズのバリデーションについて学びます。

前回

シリアライズについて

シリアライズの詳細については、以下の記事を参考にしてください。

バリデーションのエラーメッセージについて

復習になりますが、シリアライズクラスのバリデーションチェックには、「is_valid」関数を用います。

上記の場合は、シリアライズの要件を満たさなかったため、Falseになってます。

この場合は、エラーメッセージを取得することができます。

Djangoの開発経験があれば想像できると思いますが、これはDjangoのForm機能と同じです。

尚、is_validを実行しないとエラーメッセージを取得することができません。

バリデーションの種類

公式サイトによると、バリデーションを実装する方法は、3つほどあります。

1. 変数にバリデーションをつける(UniqueValidator)

UniqueValidatorは、シリアライズクラスの変数にバリデーションをつける方法です。

2. シリアライズクラスのMeta情報としてバリデーションをつける(UniqueTogetherValidator)

UniqueTogetherValidatorは、シリアライズクラスのMeta情報にバリデーションを付与します。

3. バリデーション関数を実装する

3つ目は、バリデーション関数をシリアライズクラスに定義することです。こちらを今回試してみようと思います。

validate関数をオーバーライドしました。

titleとdescriptionの内容が同じの場合は、ValidationErrorが発生します。

動作確認をしてみましょう。

エラーが発生しましたね。

ブラウザ上でも試して見ましょう。

以下のコマンドで、Djangoの開発用サーバーを起動してください。

次に「http://localhost:8000/api/articles/」にアクセスしてください。

続いて、画面下部にあるContentにJSONデータを入力します。

この時、titleとdescriptionの文字列を一致させてください。

この状態で、「POST」ボタンを押下します。

OKですね。

補足ですが、views.pyに以下の関数が実装されてます。

is_validがFalseの場合は、return Response(serializer.errors, status=status.HTTP_400_BAD_REQUESTが返されるので、エラー画面が表示できるというわけです。

個別バリデーション

個別にバリデーションを実装することもできます。

validate_XXXX(変数名)の命名規則があります。

このバリデーションでは、titleに60文字未満の文字列が渡された場合、ValidationErrorが発生するようにしました。

動作確認をしてみましょう。

テスト用のJSONデータは、以下のようになってます。

POSTを押下します。

OKですね。

次回

次回は、ModelSerializerクラスについて学びます。

関連記事

こちらもどうぞ

Djangoおすすめ書籍

Djangoを学ぶなら以下の書籍がオススメです。

緑 -> 赤 -> 紫の順でやればOKです。読みやすい英語で書かれているので、英語力もついでに上がるかもしれません^^

コメントを残す