DjangoでAPIを実装する方法(Django REST framework)
DjangoでAPIを実装する方法(Django REST framework)をご紹介します。
今回は、公式サイトのQuickStartをPyCharmで実装します。
目次
条件
- Django 2.1.7
- Python 3.7.0
- djangorestframework 3.9.2
- PyCharm Professional 2018.3
プロジェクト作成
PyCharmでDjangoプロジェクトを作成します。
- ロケーション:tutorial
- アプリケーション名:quickstart
パッケージインストール
必要なパッケージをインストールします。
ファイル > 設定 > プロジェクト・インタープリター
「djangorestframework」を追加します。
または、ターミナルで以下のコマンドを実行してインストールします。
pip install djangorestframework
マイグレート
PyCharmで、Ctrl + Alt + R を押してmanage.pyコンソールを開きます。
migrateを実行します。
スーパーユーザー作成
スーパーユーザーの作成を行います。
manage.pyコンソールで以下のコマンドを実行します。
createsuperuser --email admin@example.com --username admin
パスワードは以下の通りとします。
password123
パスワードが一般的すぎるという警告が出ますが、OKとします。(yを押します)
Serializers
シリアライザーの作成を行います。
以下のファイルを作成します。
tutorial/quickstart/serializers.py
from django.contrib.auth.models import User, Group from rest_framework import serializers class UserSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = User fields = ('url', 'username', 'email', 'groups') class GroupSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = Group fields = ('url', 'name')
views.py
views.pyを以下のように記述します。
from django.contrib.auth.models import User, Group from rest_framework import viewsets from quickstart.serializers import UserSerializer, GroupSerializer class UserViewSet(viewsets.ModelViewSet): """ API endpoint that allows users to be viewed or edited. """ queryset = User.objects.all().order_by('-date_joined') serializer_class = UserSerializer class GroupViewSet(viewsets.ModelViewSet): """ API endpoint that allows groups to be viewed or edited. """ queryset = Group.objects.all() serializer_class = GroupSerializer
urls.py
tutorial/urls.pyを以下のように記述します。
from django.urls import path, include from rest_framework import routers from quickstart import views router = routers.DefaultRouter() router.register('users', views.UserViewSet) router.register('groups', views.GroupViewSet) urlpatterns = [ path('', include(router.urls)), path('api-auth/', include('rest_framework.urls', namespace='rest_framework')) ]
router.register()で指定した値がAPIのURLになります。
例)users ⇒ http://127.0.0.1:8000/users/
ページネーション
settings.py
tutorial/settings.pyに以下を記述します。
REST_FRAMEWORK = { 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', 'PAGE_SIZE': 10 }
INSTALLED_APPSの設定
settings.py
tutorial/settings.pyに「rest_framework」を追記します。
INSTALLED_APPS = ( ... 'rest_framework', )
実行結果
manage.pyコンソールでrunserverを実行してサーバーを起動ます。
curlによる実行
コマンドラインで以下のコマンドを実行します。(Git Bashを使用しています。)
「-u」でアカウント名とパスワードを渡します。
curl -H 'Accept: application/json; indent=4' -u admin:password123 http://127.0.0.1:8000/users/
ユーザー情報が取得できます。
ブラウザでの実行
コマンドラインで以下のURLを指定します。
http://127.0.0.1:8000/users/
右上のログインリンクを選択します。
ログインすると、右上にユーザ名が表示されるようになります。
レコードの追加/更新/削除
下のフォームに必要な内容を記述後、POSTボタンを押すとレコードを追加することができます。
対象レコードを表示した状態(例:http://127.0.0.1:8000/users/2/ のようにIDを指定)で、更新/削除を行うことができます。
- PUTで更新
- DELETEで削除
様々な操作後、レコードが追加/更新されていることがわかります。
サンプルソース
GitHubに当該記事のサンプルソースを公開しています。
https://github.com/kzmrt/tutorial
参考
Django REST framework
https://www.django-rest-framework.org/