APIView

REST frameworkは Djangoの View class のサブクラスである、 APIViewclassを提供する。

APIViewclass は下記のようにView classとは異なる。

  • handler methods を通ったRequests は REST frameworkの Request インスタンスになり。 Django の HttpRequestインスタンスではない。

  • handler methods の return は REST frameworkの Responseとなり、 その view は content negotiation と response に一致した renderer を返す。

  • どの APIException のエクセプションは正しいレスポンスに仲介される。

  • 来るリクエストは認証され、handler methodsに送る前に、 適切な権限やスロットルチェックが行われる。

DRF ドキュメント

ViewSet

viewSet classは APIViewを継承している。 viewsetで API policy をコントロールするにあたり、 スタンダードの属性であるpermission_classes,authentication_classesが使える。

viewSet classはどのアクションも含んでいないので、 クラスをオーバーライドして明示的に定義する必要がある。

DRF ドキュメント

GenericViewSet

GenericViewSetclass は GenericAPIViewを継承して、 デフォルトセットの get_object、get_querysetメソッドと その他の generic view base behaviorを提供する。 しかしデフォルトではどんなアクションも含まれない。

GenericViewSetを使うにあたり、クラスのオーバーライドと 要求される mixn クラス もしくは、アクションを明示的に定義する必要がある。

DRF ドキュメント

ModelViewSet

ModelViewSet class は GenericAPIView を継承し、さまざまなミックスインクラスの動作を混合することにより、さまざまなアクションの実装を含みます。

ModelViewSet classによって提供されるアクションクラスは .list(),.retrieve(),.create(),.update(),.partial_update(),destroy()

ModelViewSet は GenericAPIViewを拡張しているので、 最低でも queryset と serializer_class属性だけで良い。

例

class AccountViewSet(viewsets.ModelViewSet):
    """
    A simple ViewSet for viewing and editing accounts.
    """
    queryset = Account.objects.all()
    serializer_class = AccountSerializer
    permission_classes = [IsAccountAdminOrReadOnly]

DRF ドキュメント

Mixins

mixin クラスは basic view behaviorで使われるアクションを提供する。 mixin クラスは .get(), .post()などのhabndler method を直接定義するのではなく、アクションメソッドを提供する。これにより柔軟に構成できる。

mixin クラスは rest_framework.mixinsより import できる。