- Django REST frameworkはWeb APIs構築用のツールキット
- Django REST framwworkを使うメリット
- 開発者向けにWeb browsable APIが提供されており、開発したAPIをブラウザから試使用(試用)することができる
- OAuth1aとOAuth2のための追加パッケージがAuthentication policiesに含まれている。これによってユーザ認証を介してAPIを使用することができる
- SerializationがORMとnon-ORMデータソースがサポートしている - Djangoのbased-viewsを継承・オーバーライドすることでカスタマイズすることができる
次のリンク先を参照
djnago REST frameworkはRESTful APIに基づいたフレームワークです。そのため、RESTfulとは何なのかを知ることは開発する上で重要なことです。
- RESTful APIとは何なのか - Qiita
- Web APIとは何なのか - Qiita
- REST APIとは? - API設計のポイント - イケてないコード
- Rest ful api設計入門 - SlideShare
※すでにappフォルダが存在し、modelの定義、settingファイルへの設定、migrateも済んでいるとします。
- Serializerの作成
- ViewSetの作成
- URL patternの設定
Serializerは、QuerySetのような複雑なデータとモデルインスタンスがJSON
,XML
や他のコンテンツタイプに転換するのを可能にするものです。また、Serializerにはパースされたデータ(JSON
,XML
etc)をモデルインスタンスやQuerySetのような複雑なタイプに転換し直すことも可能です。
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()
- Tutorial 1: Serialization - Django REST framework
- Serializers - Django REST framework
- Serializer fields - Django REST framework
- Serializer relations - Django REST framework
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)
- Tutorial 3: Class-based Views - Django REST framework
- Views - Django REST framework
- Generic views - Django REST framework
- Viewsets - Django REST framework
from django.conf.urls import url, include
urlpatterns = [
url(r'^api/', include('app.urls'))
]