Django REST Framework - Views


Mon_Nov_23
.
.
.
今日から本格的にDRFを勉強することになりました.
実は以前からいくつかの報告がありましたが、方向も見つからず、就職準備と並行していました.
ちょっと疲れたので、現職の開発者の友人がガイドをしてくれることにしました.
まず、次の印刷の前に、APIガイドカテゴリの7種類のドキュメントをDjango Rest Frameworkで学習することにした.
  • Views
  • Generic views
  • Viewsets
  • Routers
  • Serializers
  • Serializer fields
  • Serializer relations
  • あまり時間がないので、ないかもしれませんが、散布は初めてなので、とりあえずこのように勉強することにしました.
    ブログを書く理由は、対応するドキュメントを翻訳し、自分なりに簡単に書くことです.このようにしてこそ、後で便利に参考にすることができ、長く記憶に残ることができるからです.
    Class-based Views
    RESTフレームワークはDjangoのViewクラスをサブクラスとするAPI viewクラスを提供する.
    APIViewクラスは、通常のビュークラスとは次の点で異なります.

  • Handlerメソッドに渡されるリクエストはDjangoのHttpRequestインスタンスではなく、RESTフレームワークのRequestインスタンスです.

  • Handler法はDjangoのHttpResponseではなくRESTフレームワークの応答を返すことができる.ビューはコンテンツ交渉を管理し、応答に正しいレンダラーを設定します.

  • すべてのAPIException例外をキャプチャし、適切な応答に調整します.

  • 受信された要求は検証され、要求がプロセッサ・メソッドに送信される前に適切な権限および/または制限チェックが実行されます.
  • APIViewクラスの使用は、通常のビュークラスの使用とほぼ同じであり、受信されたリクエストはです.get()または.post()などの適切なプロセッサメソッドに渡されます.
    また、APIポリシーの様々な態様を制御する複数の属性をクラスに設定することもできます.
    例)
    from rest_framework.views import APIView
    from rest_framework.response import Response
    from rest_framework import authentication, permissions
    from django.contrib.auth.models import User
    
    class ListUsers(APIView):
        """
        View to list all users in the system.
    
        * Requires token authentication.
        * Only admin users are able to access this view.
        """
        authentication_classes = [authentication.TokenAuthentication]
        permission_classes = [permissions.IsAdminUser]
    
        def get(self, request, format=None):
            """
            Return a list of all users.
            """
            usernames = [user.username for user in User.objects.all()]
            return Response(usernames)
    API policy attributes
    次のプロパティは、APIビューの挿抜可能な側を制御します.
    .renderer_classes
    .parser_classes
    .authentication_classes
    .throttle_classes
    .permission_classes
    .content_negotiation_class
    API policy instantiation methods
    以下の方法は、RESTフレームワークにおいて、様々な挿抜可能なAPIポリシーをインスタンス化するために使用される.通常、これらのメソッドを再定義する必要はありません.
    .get_renderers(self)
    .get_parsers(self)
    .get_authenticators(self)
    .get_throttles(self)
    .get_permissions(self)
    .get_content_negotiator(self)
    .get_exception_handler(self)
    API policy implementation methods
    Handlerメソッドを使用して派遣する前に、次のメソッドが呼び出されます.
    .check_permissions(self, request)
    .check_throttles(self, request)
    .perform_content_negotiation(self, request, force=False)
    Dispatch methods
    次の方法は、ビューにあります.dispatch()メソッドは直接呼び出されます.
    .get (), .post()、put()、patch()および.delete()などの呼び出しハンドラメソッドの前または後に実行する必要があるすべての操作を実行します.
    .initial(self, request, *args, **kwargs)
    Handlerメソッドを呼び出す前に実行しなければならないすべての操作を実行します.このメソッドは、権限と制限を適用し、コンテンツの交渉に使用します.
    通常、このメソッドを再定義する必要はありません.
    .handle_exception(self, exc)
    Handlerメソッドによって生成されたすべての例外がこのメソッドに渡され、応答インスタンスまたは再励起例外が返されます.
    デフォルトではrest frameworkとして実装されます.exceptions.APIExceptionのすべてのサブクラスおよびDjangoのHttp 404およびPermissionDenied異常を処理し、適切なエラー応答を返す.
    APIが返すエラーレスポンスをカスタマイズする必要がある場合は、このメソッドをサブクラスとして作成する必要があります.
    .initialize_request(self, request, *args, **kwargs)
    Handlerメソッドに渡されるリクエスト・オブジェクトが、インスタンスHttpRequestではなく通常のDjangoをリクエストするものであることを確認します.
    通常、このメソッドを再定義する必要はありません.
    .finalize_response(self, request, response, *args, **kwargs)
    レスポンスプロセッサメソッドで返されるすべてのオブジェクトが、コンテンツ交渉で決定された正しいコンテンツフォーマットでレンダリングされることを確認します.
    通常、このメソッドを再定義する必要はありません.