Angular, Blockchain, Science とか

Angular, Blockchain, Science全般 の情報を主に書いていきます。

Django REST Framework の基礎 入門 APIを設計しよう

DjangoでAPIを作る方法(基礎)を見ていきます。
まずは単純にJsonを返してみます もちろん views.py です。

from django.http import JsonResponse

def dataview(request):
    date = {'djando-rest-framework': 'it is an excellent Django plugin,'}
    return JsonResponse(data)

データベースのデータをレスポンスするときはselializeします。
たとえば書籍情報のデータがBookというクラスでmodelsに定義されているとします。

from django.core import serializers
from django.http import JsonResponse
from .models import Book

def dataview(request, id):
    book = Book.objects.get(pk=id)
    data = serializers.serialize('json', [book])
    return JsonResponse(data, safe=False)

では、ここからはDjango REST framework のを見ていきます。インストールはかんたん

pip install djangorestframework
||< 
そして settings.py を
>|python|
INSTALLED_APPS = (
        ・・・
        'rest_framework',        
)

次にAPIもパーミッションを設定します。 settings.py

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': ['rest_framework.permissions.AllowAny',
                                   'rest_framework.permissions.IsAuthenticated',  
                                   ]
}

上の設定でログインしている人ならだれでもアクセスできます。
serializers を書いてみましょう。さっきと同じようにBookという名前のmodelのクラスがあることにします。
serializers.py

from rest_framework import serializers
from .models import Book

class BookSerializer(serializers.HyperLinkedModelSerializer):
    class Meta:
        model = Book
        fields = ('title', 'publisher', 'pub_data')

ModelFormに似てますね。
最後にViewを書きます views.py

from rest_framework import status
from rest_framework.decorators import api_view
from rest_framework.response import Response
from .models import Book
from .serializers import BookSerializer

@api_view(['GET'])
def api_book_list(request):
    if request.method == 'GET':
        books = Book.objects.all()
        serializer = BookSerializer(books, many=True)
        return Response(serializer.data)

@api_view(['GET'])
def api_book_detail(request, id):
    try:
        book = Book.objects.get(id=id)
    except Book.DoseNotExist:
        return Response(status=status.HTTP_404_NOT_FOUND)
    if request.method == 'GET':
        serializer = BookSerializer(book)
        return Response(serializer.data)

urlは適当に書いてください。基本はこんなところ。


Two Scoops of Django: Best Practices for Django 1.8

Two Scoops of Django: Best Practices for Django 1.8