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に送る前に、 適切な権限やスロットルチェックが行われる。
ViewSet
viewSet classは APIViewを継承している。
viewsetで API policy をコントロールするにあたり、
スタンダードの属性であるpermission_classes,authentication_classesが使える。
viewSet classはどのアクションも含んでいないので、
クラスをオーバーライドして明示的に定義する必要がある。
GenericViewSet
GenericViewSetclass は GenericAPIViewを継承して、
デフォルトセットの get_object、get_querysetメソッドと
その他の generic view base behaviorを提供する。
しかしデフォルトではどんなアクションも含まれない。
GenericViewSetを使うにあたり、クラスのオーバーライドと
要求される mixn クラス もしくは、アクションを明示的に定義する必要がある。
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]
Mixins
mixin クラスは basic view behaviorで使われるアクションを提供する。
mixin クラスは .get(), .post()などのhabndler method を直接定義するのではなく、アクションメソッドを提供する。これにより柔軟に構成できる。
mixin クラスは rest_framework.mixinsより import できる。