コメントの投稿や更新ができるようになりましたが,多くの場合は投稿された内容を検証する必要があるでしょう.ここでは確認作業を行いやすいように,タイトルは上限10文字,本文は上限15文字としてみます.入力内容を検証するには serializers.py に validation のコードを追加します.具体的には validate_フィールド名
というルールで関数を作成し,その関数の中でバリデーションのルールを指定します.なお,Validation のスタイルはいくつかありますが,今回は Field-level validation を利用しています.
comments\serializers.py
from .models import Comment
from rest_framework import serializers
class CommentSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Comment
fields = ['id', 'title', 'body', 'updated_at']
def validate_title(self, value):
if len(value) > 10:
raise serializers.ValidationError("タイトルの最大文字数は10文字です")
return value
def validate_body(self, value):
if len(value) > 15:
raise serializers.ValidationError("本文の最大文字数は15文字です")
return value
実際にバリデーションが正しく行われているか検証します.まず,(1) でタイトルには11文字,本文には16文字を指定して投稿します.その後 (2) では10文字と15文字で投稿します.(3) で投稿できた結果を確認しています.
...\django_comment_api>curl -X POST -d "title=01234567890" -d "body=0123456789012345" http://127.0.0.1:8000/comments/ ⏎ # (1) エラー {"title":["タイトルの最大文字数は10文字です"],"body":["本文の最大文字数は15文字です"]} ...\django_comment_api>curl -X POST -d "title=0123456789" -d "body=012345678901234" http://127.0.0.1:8000/comments/ ⏎ # (2) 成功 {"id":13,"title":"0123456789","body":"012345678901234","updated_at":"2023-11-23T15:24:38.905335"} ...\django_comment_api>curl http://127.0.0.1:8000/comments/13/ ⏎ # (3) 確認 {"id":13,"title":"0123456789","body":"012345678901234","updated_at":"2023-11-23T15:24:38.905335"} ...\django_comment_api>