今日は、公式サイトのチュートリアル1の、「Serialization」に取り組みました。
自分なりに理解した部分などを、自分用の備忘録として記載しておきます。
シリアライザ
今日は、Djangoにシリアライザを実装することができました。
前回までと違うのは、自分で定義したモデルに、シリアライザを実装することができたことです。これで、外部と行いたいデータのやりとりの基盤を作る準備が整ったと言えるでしょう。
serializer.py
シリアライザを実装するには、自分で定義したmodels.pyと同じ階層にserializers.pyスクリプトを作成し、以下のように記述します。
from rest_framework import serializers
from snippets.models import Snippet
class SnippetSerializer(serializers.ModelSerializer):
class Meta:
model = Snippet
fields = ["id", "title", "code", "linenos", "language", "style"]
自分で作ったSnippetクラスと、serializersをインポート。テーブルのどの項目をJSONに変換するのかを定義しています。
shell
それと、Django開発では、シェルを起動し、コードを動かすことで、Djangoの仕組みそのものを理解したり、自分が構築したロジックが、ちゃんと動いてくれるか確認したりすることができるので便利です。
試験的にデータを扱う事もできます。データを作成したり、閲覧したりすることができました。この空間でデバッグなども行えそうです。
uv run manage.py shell
JsonResponse
続いて、シリアライザで指定した項目を持つJSONデータを、どのように扱うのかをviews.pyで定義しました。
コードが長くなるので割愛しますが、ここで気づいたのは、基本的にJsonResponseを、レスポンスとして返している事です。
Web上で動くアプリケーションとしてレスポンスを作るなら、HttpResponseを返して、HTMLなどの見た目を表示する必要があるのでしょう。しかし、DRFではデータのやりとりに特化したAPIを作成するため、受け取ったリクエストに対するレスポンスは、JSONファイルのデータを渡すのみとなります。
よって、JsonResponseが返り値に使われるのです。
JSONRendererとJSONParser
最後に、JSONRendererとJSONParserについてです。
結論、前者は「Pythonの辞書→JSONデータ」の変換、後者は「JSONデータ→Pythonの辞書」の変換を行うコンポーネントです。これが、Djangoが外部とのデータ通信を行うための橋渡しとなるわけです。
views.pyでは、外部から送られてきたJSONデータによるリクエストに対し、Djangoがデータを読み取れるように、JSONParserを使用する必要があったのです。
最後に、urls.pyにパターンを追加して完成です。無事、動作を確認することができました。