見出し画像

【Django REST framework】チュートリアル学習記録 その1.Serialization

この記事では、Django REST frameworkのチュートリアルを学習していて、筆者が覚えておきたいと思ったことをまとめただけの内容となってます。

Django REST frameworkのModelSerializersを使うと、簡単にHTTPメソッドとモデルデータのCREATE・READ・UPDATE・DELETEができるみたいです。今回は、モデルとHTTPの結び付け方を一通り簡単にまとめます。

1. モデルの作成

今回は、Memoという名前のモデルを作っていこうと思います。

(models.py)
from django.db import models


class Memo(models.Model):
    title = models.CharField(max_length=100, default='title')
    description = models.TextField()

モデルを作ったら、マイグレーションをします。

(ターミナル)
python manage.py makemigrations
python manage.py migrate

makemigrationsをすると、migrationsフォルダにpythonファイルができているので、一度見てみることをおすすめ。(idというフィールドがあることを確認)

モデルを作ったら、それを扱うため?のSerializerを作っていきます。


2. Serializerの作成

作ったモデルを扱うためのSerializerを作ります。
アプリケーションフォルダにserializers.pyというファイルを新規作成します。

from rest_framework import serializers
from memo_app.models import Memo

# model serializer
class MemoSerializer(serializers.ModelSerializer):
    class Meta:
        # 対応するモデルを指定
        model = Memo
        # モデルのFieldを書く、ただしidを追加することを忘れずに
        fields = ['id', 'title', 'description']


3. views.pyに処理を追加

from django.http import HttpResponse, JsonResponse
from django.views.decorators.csrf import csrf_exempt
from rest_framework.parsers import JSONParser
from memo_app.models import Memo
from memo_app.serializers import MemoSerializer


@csrf_exempt
def read_list(request):
    """
    get all data
    """
    if request.method == 'GET':
        # モデルから全ての情報を取得
        memos = Memo.objects.all()
        serializer = MemoSerializer(memos, many=True)
        return JsonResponse(serializer.data, safe=False)

上では、全てのデータをJson形式で返すRead処理しか記述していないが、serializerを使うとPOST=>create, PUT=>update, DELETE=>delete の処理が簡単にできる。

serializerを使うことで、JSON=>Model, Model=>Jsonが簡単にできるみたい。

# Model => Json
serializer = MemoSerializer(モデル)
serializer.data

# Json => Model
serializer = MemoSerializer(data=data)
if serializer.is_valid():
    serializer.save()


3. urls.pyを設定

ここに関しては、Djangoのやり方と違いはないです

# projectのurls.py
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
   path('admin/', admin.site.urls),
   # memo_appにパス
   path('', include('memo_app.urls')),
]


memo_app/url.pyを作成

from django.urls import path, include

from memo_app import views

urlpatterns = [
   path('memos/', views.memo_list),
]


今回の記事はこんな感じです。

勉強してる感想としては、FastAPIよりも楽ができそうで良さそうといった感じ。

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