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/















