djangoRestFramework(DRF)を使ってみる

参考:
  ・Django REST framework (DRF)入門 概念、考え方、全体像のImage付き
  ・Django REST framework 超入門
  ・【Django入門】REST FrameworkでAPIを作ってみよう

アプリケーションの作成

下のコマンドで適当なアプリケーションを作成します。


python3.6 manage.py startapp drf

RestFrameworkをインストール

今回はpipを使ってdjangorestframeworkをインストールします。


pip3 install djangorestframework

アプリとフレームワークの読み込み

settings.pyにアプリとrestframeworkを読み込ませます。


INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'drf', # 追加
    'rest_framework', # 追加
]

モデルの作成

下記の通りシンプルなモデルを作成してみます。


from django.db import models

class Writer(models.Model):
    name = models.CharField(max_length=128)

class Article(models.Model):
    writer = models.ForeignKey(Writer, on_delete=models.CASCADE , related_name='articles')
    title = models.CharField(max_length=512)
    contents = models.TextField()

マイグレーション

マイグレートしてモデルの内容をデータースに反映させます。


python3.6 manage.py makemigrations drf
python3.6 manage.py migrate

serializer作成

seerializerは、models.pyによって定義されたObjectとJsonを相互に変換してくれる役割を担っているそうです。
「drf/serializers.py」を下記の通りに作成します。


from rest_framework import serializers
from drf.models import Article, Writer

class WriterSerializer(serializers.ModelSerializer):
    class Meta:
        model = Writer
        fields='__all__'

class ArticleSerializer(serializers.ModelSerializer):
    class Meta:
        model = Article
        fields='__all__'

apis.pyの作成

APIの実装が下記の通りです。
「drf/apis.py」を下記の通りに作成します。


from rest_framework import viewsets, routers
from drf.models import Article
from drf.serializers import ArticleSerializer

class ArticleViewSet(viewsets.ModelViewSet):
    queryset = Article.objects.all()
    serializer_class = ArticleSerializer

router = routers.DefaultRouter()
router.register(r'articles', ArticleViewSet)

ルーティング

「config/urls.py」を下記の通りに記述します。


from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('drf/',include('drf.urls')),
]

「drf/urls.py」を下記の通りに記述します。


from django.conf.urls import url, include
from drf import apis

urlpatterns = [
    url('api/', include(apis.router.urls)),
]

データ投入

ターミナルから操作して適当なデータを入れてみます。


python3.6 manage.py shell
>>> from drf.models import Writer, Article
>>> Writer(name='taro').save()
>>> Writer.objects.all()
<QuerySet [<Writer: Writer object (1)>]>
writer = Writer.objects.all().first()
Article(writer=writer, title='Hello.', contents='Hello Django.').save()
>>> Article.objects.all()
<QuerySet [<Article: Article object (1)>]>
>>> quit()

データの確認

それではデータも入ったのでブラウザからAPIを叩いてみます。

ちゃんと表示されました!
とりあえず今回はこの辺にして、後日こちら「Django REST frameworkでAPIを作ってみた」で理解を深めていきたいと思います。