Generic Views(ジェネリックビュー)とは?
Django REST Frameworkが提供するジェネリックビューは、よく使われるAPIパターンを簡単に実装できるように設計されています。
これにより、モデルに基づいたビューを迅速に作成できます。
Generic Viewsを使用することで、同じようなコードを書かずに、簡単にAPIエンドポイントを作成できます。
以下の例では、UserListクラスを使ってユーザーの一覧を表示(GETリクエスト)したり、新しいユーザーを作成(POSTリクエスト)したりできます。
from rest_framework import generics
from myapp.serializers import UserSerializer
from django.contrib.auth.models import User
from rest_framework.permissions import IsAdminUser
class UserList(generics.ListCreateAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
permission_classes = [IsAdminUser]
GenericAPIView
GenericAPIViewは、APIViewクラスを拡張して、リストビューや詳細ビューに必要な標準的な機能を追加します。Generic Viewsは、GenericAPIViewとミックスインを組み合わせて作られています。
- queryset: 返されるオブジェクトのセットを定義します。クエリセットを動的に変更したい場合は、get_queryset()メソッドをオーバーライドします。
- serializer_class: 入力のバリデーションや出力のシリアライズに使用するシリアライザを指定します。
主なジェネリックビューの種類
- ListCreateAPIView: 複数のオブジェクトの一覧表示と、新しいオブジェクトの作成をサポートします。
- RetrieveUpdateDestroyAPIView: 特定のオブジェクトを取得、更新、削除する機能を提供します。
Mixinクラス
ジェネリックビューは、いくつかのミックスインを使用して基本的な動作を提供します。例えば、ListModelMixinはリストを表示するための.list()メソッドを提供し、CreateModelMixinは新しいオブジェクトを作成するための.create()メソッドを提供します。これにより、複雑なビューの作成が容易になります。
主なミックスイン:
- ListModelMixin: オブジェクトの一覧を表示
- CreateModelMixin: 新しいオブジェクトを作成
- RetrieveModelMixin: 特定のオブジェクトを取得
- UpdateModelMixin: 既存のオブジェクトを更新
- DestroyModelMixin: オブジェクトを削除
具体的なビュークラス
ジェネリックビューには以下の具体的なビュークラスがあります。
- ListAPIView: 読み取り専用で、オブジェクトのリストを表示。
- CreateAPIView: 新しいオブジェクトを作成。
- RetrieveAPIView: 特定のオブジェクトを取得。
- UpdateAPIView: オブジェクトを更新。
- DestroyAPIView: オブジェクトを削除。
カスタマイズ
ジェネリックビューの動作をカスタマイズするために、get_queryset()やget_serializer_class()などのメソッドをオーバーライドすることができます。
また、カスタムミックスインやカスタムベースクラスを作成して、特定の処理を複数のビューに適用することも可能です。
以下はオブジェクトの作成時にユーザー情報を追加する例です。これにより、リクエストを行ったユーザー情報が自動的に保存されます。
def perform_create(self, serializer):
serializer.save(user=self.request.user)
Generic Views, GenericAPIView, GenericViewSetは何が違うのか
似た名前が出てきて、ややこしいので、何が違うのかまとめました。
Generic Viewsは Django REST Frameworkの中で提供されるさまざまな「一般的なAPI操作」を簡素化するためのビュークラス群です。
この中で使われるのがGenericAPIViewやmixinクラスです。
これらを束ねて使うことで、より複雑なビューやビューセット(GenericViewSet)を構成できます。
- Generic Views: 一般的なパターン(リスト、詳細、作成など)を迅速に実装するための具体的なビュークラス。
- GenericAPIView: Generic Viewsの基盤となるクラスで、共通のAPI機能を提供。クエリセットの取得やシリアライザの処理、フィルタリングなど、APIに必要な共通のロジックを提供します。ミックスインと組み合わせてCRUD操作を追加可能。
- GenericViewSet: GenericAPIViewとミックスインを組み合わせた、処理の集まりというイメージ。複数のアクション(リスト、詳細、作成、更新、削除など)を一つのクラスでまとめて管理しています。通常はルーターと組み合わせて使われ、URLパターンが自動的に生成されます。