なぜDjango Serializerを使うか
結論:serializerとはデータの入出力を扱い、モデルでの橋渡しをするクラスのことです。
Serializerとは、DjangoのFormに似た働きをし、Modelに対してデータを適切な形にして入力、出力するものです。
Serializerを用いてCURD処理の実装は簡単となります。
CURDとは
「作成(Create)」
「読み出し(Read)」
「更新(Update)」
「削除(Delete)」をそれぞれ頭文字で表したもの
全体の流れは下記となります。
ユーザーから開始する場合
web→urls→views→serialazers→models→DB
サーバーから開始する場合
DB→models→serialazers→views→urls→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] [リクエストパラメータ]
この記事が気に入ったらサポートをしてみませんか?