Django Logo

[Django]Django REST framework 入門

最近よく「 Django REST framework 」という Django のライブラリを使用するのでその使い方をまとめておきたいと思います。
今回は入門としてライブラリのインストールから簡単な動作確認までを説明していきたいと思います。

Django REST framework とは

DjangoWebAPI を開発することをサポートしてくれるライブラリです。 RESTfulAPI の開発をライブラリの標準としてサポートしています。

本家サイトはこちら

このライブラリの良いところとして、 API の動作検証をするための Web コンソールが標準で準備されているという点が挙げられます。なので、他に特別なツールなどを導入しなくても簡単に API のパラメータや戻り値を確認することができます。

前提条件

Django REST framework は以下の条件で動作します。

  • Python : 2.7, 3.4, 3.5, 3.6, 3.7
  • Django : 1.11, 2.0, 2.1

では、早速 Django REST framework の使い方を説明していきたいと思います。

Django REST framework のインストール

インストールには pip を使用します。

$ pip install djangorestframework

Djangosettings.pyINSTALLED_APPSrest_framework を追加します。

INSTALLED_APPS = (
    ...
    'rest_framework',
)

ログインビューとログアウトビューを使えるようにするため、 urls.py を以下のように編集します。

urlpatterns = [
    ...
    url(r'^api-auth/', include('rest_framework.urls'))
]

ここまでで、 Django REST framework のインストールと設定は以上です。
次は実際にサンプルを使用しながら動作の説明をしていきたいと思います。

サンプル

settings.pyREST_FRAMEWORK の設定情報を追加します。ここでは標準のパーミッションの設定を追加しています。

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
    ]
}

urls.py に参考となるコードを追加していきます。

from django.conf.urls import url, include
from django.contrib.auth.models import User
from rest_framework import routers, serializers, viewsets

# Serializersを定義します
class UserSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = User
        fields = ('url', 'username', 'email', 'is_staff')

# ViewSetsとしてビューの振る舞いを定義します
class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer

# Routersの設定を行います
router = routers.DefaultRouter()
router.register(r'users', UserViewSet)

# URLのパスの設定を行います
urlpatterns = [
    url(r'^', include(router.urls)),
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]

サンプルを実際に動かしてみる

実際に作ったコードを動かしてみます。プロジェクト実行前にスーパーユーザを作成しておきます。

$ python manage.py createsuperuser

UsernameEmail addressPassword を入力してスーパーユーザを追加します。
この状態で runserver コマンドでプロジェクトを実行します。

$ python manage.py runserver

http://localhost:8000/ 」にアクセスするとこんな画面が表示されます。
Django REST framework 1

次に「 http://localhost:8000/users/ 」にアクセスすると、先ほど登録したスーパーユーザの情報を「 User List 」として確認することができます。
Django REST framework 2

さらに「 http://localhost:8000/users/1/ 」にアクセスすることで、スーパーユーザの情報を1件だけ表示させることができます。
Django REST framework 3

ここまでで、「一覧表示」と「詳細表示」が RESTful に実行されていることが確認できました。データの「登録」「編集」「削除」の動作を確認するためには、登録したスーパーユーザの情報を使ってログインしたあとで動作を確認する必要があります。これは先ほど、「 settings.py 」に記述した「 DEFAULT_PERMISSION_CLASSES 」の権限設定により、ログインしているユーザ以外はデータの参照しかできないように制御されているためです。

では、早速ログインしてデータの「登録」「編集」「削除」を実行してみたいと思います。

まず、画面右上の「 Log in 」をクリックしてログイン画面へ移動します。
Django REST framework 4

最初に登録しておいたスーパーユーザの「 Username 」と「 Password 」を入力してログインします。
Django REST framework 5

ログイン成功した状態で「 http://localhost:8000/users/ 」にアクセスすると、データ登録用のフォームが表示されるようになります。
Django REST framework 6

このフォームに必要な情報を入力して「 POST 」ボタンをクリックすると、データが登録されます。もう一度「 http://localhost:8000/users/ 」にアクセスするとデータが2件になっていることが確認できます。
Django REST framework 7

今追加したデータを編集してみます。「 User List 」の「 url 」はリンクになっているので、2件目の「 url 」をクリックして詳細画面へ移動します。編集画面にはデータ編集用のフォームが表示されていますので、そちらの値を編集して「 PUT 」ボタンをクリックするとデータが編集できます。
Django REST framework 8

削除は編集画面の「 DELETE 」ボタンをクリックすれば実行されます。
Django REST framework 9

最後に

以上、 Django REST framework の導入方法と Web コンソールの基本的な使い方を説明でした。サーバーサイドは API として実行させつつ、クライアントサイドは Android・iOS はネイティブアプリに、 PCWeb アプリと言った具合にプラットフォームに合わせて変更したい場合に Django REST framework はサーバサイドの仕組みとして非常に有用ですので、基本的な使い方はしっかりと押さえておきたいですね。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です