LoginSignup
12
15

More than 5 years have passed since last update.

Django REST framework でJSONをコンソール画面からGET/POST/PUT/DELETE

Last updated at Posted at 2018-11-17

前回の記事↓
Djangoでjsonを扱うRESTfulなAPIを作る - Qiita

Django REST framework の追加

djangoのrest frameworkをインストールします

$ pip install djangorestframework

setting.py内の INSTALLED_APPという項目にrest_frameworkを追加します

setting.py
.....

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp',
+   'rest_framework'  #追加行
]

.....

シリアライザーの作成

シリアライズとは、複数の並列データを直列化して送信することを意味します

シリアライザーファイルをmyapp内に作成します

$ touch myapp/serializers.py

中身を編集します

serializers.py
from rest_framework import serializers
from myapp.models import Book, Author

class AuthorSerializer(serializers.ModelSerializer):
    class Meta:
        model = Author

class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book

apiの作成

$ touch myapp/apis.py
apis.py
from rest_framework import viewsets, routers
from myapp.models import Book
from myapp.serializers import BookSerializer

class BookViewSet(viewsets.ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerializer

router = routers.DefaultRouter()
router.register(r'books', BookViewSet)

urls.pyを以下のように編集することでapiのエンドポイントを記述します

uris.py
from django.conf.urls import url,include
from django.contrib import admin
from myapp import apis

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

プラウザで http://localhost:8000/api にアクセスします

image.png

apiのルートコンソール画面が表示されました

今度は http://localhost:8000/api/books にアクセスしてみましょう
Creating a ModelSerializer without either the 'fields' attribute or the 'exclude' attribute has been deprecated since 3.3.0, and is now disallowed. Add an explicit fields = '__all__' to the BookSerializer serializer.
というエラーが返されるはずです

これはrest_framework3.3.0以降でModelSerializerにfields属性やexclude属性を追加していないために発生します
Serializers - Django REST framework

You can also set the fields attribute to the special value '__all__' to indicate that all fields in the model should be used.

今回はfieldsを特に制限するつもりはないので、serializers.pyを以下のように編集します

serializers.py
from rest_framework import serializers
from myapp.models import Book, Author

class AuthorSerializer(serializers.ModelSerializer):
    class Meta:
        model = Author
+       fields='__all__'  #追加行

class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
+       fields='__all__'  #追加行

http://localhost:8000/api/books に再アクセスしてみます

image.png

この画面が出れば成功です

コンソール画面からのPOST

curlコマンドやクライアントサイドからPOSTできますが、このコンソール画面からも可能です

content:の欄にpostしたいデータを入力して右下のpostボタンを押します

image.png

3つ本を追加してみました

コンソール画面からのPUT

putしたいデータのid番号にアクセスします
今回はid2を編集したいのでアドレスは http://localhost:8000/api/books/2/ となります

image.png

postと同じようにフォームに入力します

image.png

変更できているか確認します http://localhost:8000/api/books/

image.png

無事(?)おじいさんが生まれました

コンソール画面からのDELETE

putのときと同じ画面の赤いボタンを押すと、特定のidのデータを削除することができます

次回の記事↓
axios & Django REST framework でJSONをGET/POST - Qiita

12
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
15