DRFビュー - ベースクラス

基本クラスの2ビュー

RESTフレームワークは、基本クラスの大型汎用クラスビューを提供し、ビューの作成を簡素化するために拡張します。

要求と応答上記のコードを区別するために、我々は再び、新たなサブアプリケーションを作成します。


python manage.py startapp baseview

APIView


rest_framework.views.APIView

APIViewRESTフレームワーク提供されるすべてのビューの基本クラスです、Djangoはから継承されたView親クラス。

APIViewView例外います。

  • ビューメソッドに渡されるが、残りのフレームワークであるRequest代わりのDjangoの対象HttpRequesetオブジェクト。
  • この方法は、残りのフレームワークビューを返すことができるResponseフロントエンドによって必要とされるフォーマットに準拠(レンダリング)データセットに応答して、オブジェクトのビューと、
  • 任意のAPIException例外が捕捉され、かつ適切な応答への情報です。
  • 事前分布への発送を()の実行、認証、認可チェック、フロー制御を要求します。

定義された属性をサポートしています

  • authentication_classesのリストや元祖、認証タイプ
  • permissoin_classesのリストや元祖、権限チェッククラス
  • throttle_classesリストやタプル、フロー制御クラス

APIView、ビュー定義、まだクラスのget()、ポスト()メソッドまたはその他の要求の実施形態を達成するための従来の方法です。

例えば:

from rest_framework.views import APIView
from rest_framework.response import Response

# url(r'^books/$', views.BookView.as_view()),
class BookView(APIView):
    def get(self, request):
        books = Book.objects.all()
        serializer = BookSerializer(books, many=True)
        return Response(serializer.data)

GenericAPIView [一般ビュークラス]


rest_framework.generics.GenericAPIView

継承されAPIVIew操作のmainメソッドは、直列化およびデータベースクエリの役割は、以下の方法ミックスイン拡張クラスのサポートの実装を提供することである増加します。典型的には、使用される場合、一つ以上のミックスインクラスを拡張することができます。

プロパティおよび提供される配列の使用方法

  • 属性:

    • serializer_class使用指定されたシリアライザビュー
  • 方法:

    • get_serializer_class(自己)

      ビュークラスの複数のシリアライザを呼び出したとき、状態は、オブジェクトのシーケンスを実行する方法のさまざまなビューを可能にすることができるクラス名の異なるシーケンスを返すことによってget_serializer_classプロセスによって決定することができる起こります。

      デフォルトで返さ戻るシリアライザクラスは、serializer_class例えば、上書きすることができます。

      def get_serializer_class(self):
          if self.request.user.is_staff:
              return FullAccountSerializer
          return BasicAccountSerializer
    • get_serializer(自己、引数、* kwargsから)

      私たちは、ビュー内のシリアライズされたオブジェクトを取得したい場合は戻り値シリアライズされたオブジェクトは、主に、使用するには、拡張ミックスインクラスを提供するために使用されて、あなたはまた、このメソッドを直接呼び出すことができます。

      注オブジェクトの配列を提供する方法は、属性は、コンテキストオブジェクトのシリアル化に3件のデータが追加されると、その:要求、フォーマット、ビュー、これら3つのデータオブジェクトは、シリアライザを定義するために使用することができます。

      • 要求現在のリクエストオブジェクトのビューを
      • ビュークラス現在のビュー・オブジェクト要求
      • 戻り値は、現在の要求の形式は、データ形式を希望しました

データベースクエリのプロパティとメソッドを提供します

  • 属性:

    • クエリセットデータセットはクエリを使用することを示します
  • 方法:

    • get_queryset(自己)

      ビューで使用されるリターンクエリセットは、主に拡張ミックスインクラスの使用を提供するために使用され、データへのアクセスのための基礎であり、リストビューの詳細表示、デフォルトへの復帰querysetの属性は、たとえば、上書きすることができます。

      def get_queryset(self):
          user = self.request.user
          return user.accounts.all()
    • GET_OBJECT(自己)

      バックの詳細ビューデータオブジェクトモデルクラスは、主に拡張クラスミックスインの使用を提供するために、必要。

      試みでモデルクラスのオブジェクトの詳細情報を取得するには、このメソッドを呼び出すことができます。

      モデルクラスオブジェクトの詳細訪問が存在しない場合は、404を返します。

      現在のオブジェクトがデフォルトで提供check_object_permissions方法APIViewを使用してアクセスする権限を有するかどうかを、このメソッドをチェック。

      例えば:

      # url(r'^books/(?P<pk>\d+)/$', views.BookDetailView.as_view()),
      class BookDetailView(GenericAPIView):
          queryset = BookInfo.objects.all()
          serializer_class = BookInfoSerializer
      
          def get(self, request, pk):
              book = self.get_object() # get_object()方法根据pk参数查找queryset中的数据对象
              serializer = self.get_serializer(book)
              return Response(serializer.data)

設定可能なその他のプロパティ

  • pagination_class指定されたクラス制御]タブ
  • filter_backendsは、バックエンドの制御フィルタを指定しました

おすすめ

転載: www.cnblogs.com/jjzz1234/p/11832250.html