# 2.3 Django REST Framework(DRF)入門
Django REST Framework(DRF)入門
前回の記事では Django の モデルベース開発 について紹介した。
今回はその続きとして、モデルを API に展開するための仕組み である Django REST Framework(DRF) を取り上げる。
DRF とは何か
Django は標準で HTML レンダリングが中心のフレームワーク。
一方で モダンな業務システムでは「API サーバ」としての役割 が求められることが多い。
DRF はそのためのライブラリで、以下の機能を提供する。
-
Serializer
モデルやクエリセットを JSON に変換(逆に入力をバリデーションしてモデルに変換) -
ViewSet
一般的な CRUD(一覧・取得・作成・更新・削除)処理を簡単に実装できる仕組み -
Router
ViewSet を URL に自動で割り当てる仕組み
これらを組み合わせることで、モデルを基点にした API をすぐに作れる。
コード例:受注モデルを API 化する
モデル(前回と同じ)
# models.py
from django.db import models
class Order(models.Model):
customer_name = models.CharField(max_length=100)
total_amount = models.DecimalField(max_digits=10, decimal_places=2)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f"{self.customer_name} ({self.total_amount}円)"
Serializer の定義
# serializers.py
from rest_framework import serializers
from .models import Order
class OrderSerializer(serializers.ModelSerializer):
class Meta:
model = Order
fields = ["id", "customer_name", "total_amount", "created_at"]
Serializer を使うことで、Order モデルを JSON ⇔ Python オブジェクト に変換できる。
ViewSet の定義
# views.py
from rest_framework import viewsets
from .models import Order
from .serializers import OrderSerializer
class OrderViewSet(viewsets.ModelViewSet):
queryset = Order.objects.all()
serializer_class = OrderSerializer
ModelViewSet
を使うことで、標準的な CRUD 操作がすべて揃う。
Router に登録
# urls.py
from rest_framework.routers import DefaultRouter
from .views import OrderViewSet
router = DefaultRouter()
router.register(r"orders", OrderViewSet)
urlpatterns = router.urls
これで以下の API が自動的に生成される。
-
GET /orders/
(一覧取得) -
POST /orders/
(新規作成) -
GET /orders/{id}/
(詳細取得) -
PUT /orders/{id}/
(更新) -
DELETE /orders/{id}/
(削除)
実際のレスポンス例
GET /orders/
)
一覧取得([
{
"id": 1,
"customer_name": "株式会社テスト",
"total_amount": "50000.00",
"created_at": "2024-04-01T10:00:00Z"
},
{
"id": 2,
"customer_name": "サンプル商事",
"total_amount": "120000.00",
"created_at": "2024-04-02T15:30:00Z"
}
]
POST /orders/
)
新規作成(送信する JSON:
{
"customer_name": "新規取引先",
"total_amount": "75000.00"
}
レスポンス:
{
"id": 3,
"customer_name": "新規取引先",
"total_amount": "75000.00",
"created_at": "2024-04-03T12:45:00Z"
}
DRF を使うメリット
-
モデルベース開発と相性が良い
モデルを定義して Serializer に渡すだけで API ができる -
開発スピードが速い
CRUD API がほぼ自動で生成される -
拡張性が高い
独自のビジネスロジックや認証を追加しやすい -
統一感のある API
Router を使うことで URL 設計が自然に揃う
まとめ
Django REST Framework を使えば、Django のモデルを そのまま API 化 できる。
- モデルを中心に設計
- Serializer でデータを JSON 化
- ViewSet で CRUD を自動化
- Router で URL に割り当て
これにより、Django は「サーバサイドレンダリングのフレームワーク」から「強力な API サーバ」に進化する。
次の記事では、この DRF をベースにした API 設計の工夫(バージョン管理・エラーハンドリングなど) を紹介する予定。
Discussion