見出し画像

なぜDjango Serializerを使うか


結論:serializerとはデータの入出力を扱い、モデルでの橋渡しをするクラスのことです。

Serializerとは、DjangoのFormに似た働きをし、Modelに対してデータを適切な形にして入力出力するものです。

Serializerを用いてCURD処理の実装は簡単となります。

  CURDとは
「作成(Create)」
「読み出し(Read)」
「更新(Update)」
「削除(Delete)」をそれぞれ頭文字で表したもの

全体の流れは下記となります。

ユーザーから開始する場合

web→urls→views→serialazers→models→DB

サーバーから開始する場合

DB→models→serialazers→viewsurls→web

①まずPostモデル作成

class Post(models.Model):
   title = models.CharField('タイトル', max_length=50)
   text = models.TextField('テキスト')
   created_at = models.DateField('作成日', auto_now_add=True)
   updated_at = models.DateField('更新日', auto_now=True)
   def __str__(self):
       return self.title

②PostのSerializerを作成

from rest_framework import serializers# Django Rest Frameworkをインポート
from .models import Post# models.py のPostクラスをインポート
class PostSerializer(serializers.ModelSerializer):
   class Meta:
       model = Post# 扱う対象のモデル名を設定する
       fields = ('title','text','created_at','updated_at','id')fields = ('title','text','created_at','updated_at','id')

で指定したカラムを出力して表示できるようになっています。

fieldsはレスポンスしたいモデルフィールドを指定します。

特に指定せず全ての項目をレスポンスする場合は'__all__'とします。

③Viewでserializerを指定

from rest_framework import viewsets
from .models import Post
from .serializers import PostSerializer
class PostViewSet(viewsets.ModelViewSet):
   """PostオブジェクトのCRUD"""
   queryset = Post.objects.all()# 全てのデータを取得
   serializer_class = PostSerializer

④あとはurlに追加するだけで簡単にCRUD処理を実装できます。

from django.urls import path
from . import views
from rest_framework import routers
from .views import PostViewSet
router = routers.DefaultRouter()
router.register(r'posts', PostViewSet)

router を定義して、router.register に URLとそのURLがリクエストされた時に呼び出すview.pyのクラス(PostViewSet)を紐付ける。

最後にcurlで手軽に HTTPリクエストを試します

curl --version
 ​

書き方は下記の通りです。 ​

curl -X [HTTPメソッド] [URL] [リクエストパラメータ]


この記事が気に入ったらサポートをしてみませんか?