Djangoroidの奮闘記

python,django,angularJS1~三十路過ぎたプログラマーの奮闘記

Django REST Frameworkに再挑戦 その1

概要

Django REST Frameworkに再挑戦 その1

参考サイト

www.django-rest-framework.org

www.codingforentrepreneurs.com

Getting Started & Installations

以下の動画を参考にセットアップする。

Coding for Entrepreneurs

API Module & ListAPIView

  • posts/api ディレクトリを作成する。ついで、posts/api/init.pyを作成する。

  • posts/api/views.pyを作成する。

Generic views - Django REST framework

# class based viewで作成する。
from rest_framework.generics import ListAPIView 

from posts.models import Post


class PostListAPIView(ListAPIView):
    queryset = Post.objects.all()
  • posts/api/urls.pyを作成する。
from django.conf.urls import url
from django.contrib import admin

from .views import (
    PostListAPIView,
    )

urlpatterns = [
    url(r'^$', PostListAPIView.as_view(), name='list'),
    # url(r'^create/$', post_create),
    # url(r'^(?P<slug>[\w-]+)/$', post_detail, name='detail'),
    # url(r'^(?P<slug>[\w-]+)/edit/$', post_update, name='update'),
    # url(r'^(?P<slug>[\w-]+)/delete/$', post_delete),
]
  • blog/urls.pyに追記する。
...
urlpatterns = [

# api/posts/はajaxで裏で処理する用のURL。jQueryなどで、ajaxの仕組みを利用してアクセスする。
...
    url(r'^api/posts/', include("posts.api.urls", namespace='posts-api')),
...
]
...
  • この状態で、localhost:8000 にアクセスすると、'PostListAPIView' should either include aserializer_classattribute, or override theget_serializer_class()method.が表示されるので、serializer_classを定義する。

Serialize Model Data into JSON

  • Serializer は、model dataなどをJSON形式に変換する(マッピングする)クラス?

Serializers - Django REST framework

  • posts/api/serializers.pyを作成する。
from rest_framework.serializers import ModelSerializer

from posts.models import Post


class PostSerializer(ModelSerializer):
    class Meta:
        model = Post
        fields = [
            'title',
            'slug',
            'content',
        ]
  • posts/api/views.py にSerializerについてのコードを追記する。
from rest_framework.generics import ListAPIView

from posts.models import Post
from .serializers import PostSerializer

class PostListAPIView(ListAPIView):
    queryset = Post.objects.all()
    serializer_class = PostSerializer # ここで、serializerのclassを設定する。
  • localhost:8000/api/posts/にアクセスして、TemplateDoesNotExist at /api/posts/と表示されればOK。

  • settings.pyに、コードを追記する。

INSTALLED_APPS = (
    ...
    'rest_framework',
)
  • この状態で、再度localhost:8000/api/posts/にアクセスする。django rest frameworkのページが表示される。このページは直接は開いて操作することはあまりない。ajaxの操作先だと思われる。

  • 試しにserializers.pyのSerializerclassに、fieldsを追加すると、追加されたフィールドのデータも表示されるようになる。超簡単!

from rest_framework.serializers import ModelSerializer

from posts.models import Post


class PostSerializer(ModelSerializer):
    class Meta:
        model = Post
        fields = [
            'id',
            'title',
            'slug',
            'content',
            'publish',
        ]

これはめちゃくちゃ便利な予感。