Skip to content

Instantly share code, notes, and snippets.

@gtaiyou24
Last active April 20, 2017 04:30
Show Gist options
  • Save gtaiyou24/64db342ddab0395f91f5a745c12a718e to your computer and use it in GitHub Desktop.
Save gtaiyou24/64db342ddab0395f91f5a745c12a718e to your computer and use it in GitHub Desktop.

django REST frameworkとは

logo
  • Django REST frameworkはWeb APIs構築用のツールキット
  • Django REST framwworkを使うメリット
    • 開発者向けにWeb browsable APIが提供されており、開発したAPIをブラウザから試使用(試用)することができる
    • OAuth1aとOAuth2のための追加パッケージがAuthentication policiesに含まれている。これによってユーザ認証を介してAPIを使用することができる
    • SerializationがORMとnon-ORMデータソースがサポートしている    - Djangoのbased-viewsを継承・オーバーライドすることでカスタマイズすることができる

Requirements/Installation

次のリンク先を参照

RESTfulなAPIとは

djnago REST frameworkはRESTful APIに基づいたフレームワークです。そのため、RESTfulとは何なのかを知ることは開発する上で重要なことです。

REST APIの構築方法

※すでにappフォルダが存在し、modelの定義、settingファイルへの設定、migrateも済んでいるとします。

  1. Serializerの作成
  2. ViewSetの作成
  3. URL patternの設定

1. Serializerの作成

Serializerとは?

Serializerは、QuerySetのような複雑なデータとモデルインスタンスがJSON,XMLや他のコンテンツタイプに転換するのを可能にするものです。また、Serializerにはパースされたデータ(JSON,XMLetc)をモデルインスタンスやQuerySetのような複雑なタイプに転換し直すことも可能です。
Serializer

Serializerクラスの作成

serializers.pyをappフォルダ直下に作成して、以下のようにSerializerクラスを定義します。

from rest_framework import serializers


class ModelNameSerializer(serializers.Serializer):
    model_field_name1 = serializers.CharField(max_length=200)
    model_field_name2 = serializers.IntegerField(read_only=True)
    model_field_name3 = serializers.DateTimeField()

2. ViewSetの作成

views.pyファイルにClass-based Viewsを使ってAPIのクラスを定義する。Class-based Viewsではなく関数を定義してAPIを開発できるが、DRYコードを実現するために前者を使ってAPIを作成する。

from app.models import Model1
from app.serializers import ModelNameSerializer

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status


class ModelList(APIView):
    def get(self, request, format=None):
        model1s = Model1.objects.all()
        serializer = ModelNameSerializer(model1s, many=True)
        return Response(serializer.data)

    def post(self, request, format=None):
        serializer = ModelNameSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

3. URL patternの設定

from django.conf.urls import url, include


urlpatterns = [
    url(r'^api/', include('app.urls'))
]

参考文献・サイト

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment