Django REST Frameworkに再挑戦 その1
概要
Django REST Frameworkに再挑戦 その1
参考サイト
www.codingforentrepreneurs.com
Getting Started & Installations
以下の動画を参考にセットアップする。
API Module & ListAPIView
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 a
serializer_classattribute, or override the
get_serializer_class()method.
が表示されるので、serializer_class
を定義する。
Serialize Model Data into 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', ]
これはめちゃくちゃ便利な予感。