ビューファミリー
1.generics:ビュークラス
2.mixins:ビュークラスを展開する(ツール)
3.viewsets:ビューセット
ビュー層:
rest_framework.generics インポートGenericAPIView から。インポートモデル、シリアライザ から utils.response インポートAPIResponseの #のビュークラス:1.generics クラスBooksGenericAPIView(GenericAPIView): クエリセット = models.Book.objects.filter(is_delete = 偽) serializer_class = serializers.BooksModelSerializer #URLで知らlookup_field = 'PK'パケット#、PKが知らパケットはここでは省略することができますされて DEF(セルフ、要求、* argsを、** GET kwargsから): PK = kwargs.get(「PK' ) の場合 ではないPK: book_query = self.get_queryset() book_ser = self.get_serializer(book_query、多くの= 真) リターン APIResponse(0、' OK " 、book_ser.data) 他: book_obj = self.get_object() book_ser = 自己.get_serializer(book_obj) リターン APIResponse(0、' OK ' 、book_ser.data) #1 视图工具集:2.mixins から rest_frameworkのインポートミックスイン クラスBooksMixinsGenericAPIView(mixins.ListModelMixin、mixins.RetrieveModelMixin、GenericAPIView): クエリセット = models.Book.objects.filter(is_delete = False)が serializer_class = serializers.BooksModelSerializer デフのget(自己、要求、* argsを、** kwargsから): PK = kwargs.get(' PK ' ) の場合 ではないPK: リターン self.list(要求、* argsを、** kwargsから) 他: 戻り self.retrieve(要求、* argsを、** kwargsから) #整合ミックスイン到ジェネリック中:不需要自己写功能 から rest_framework.genericsがインポートListCreateAPIView、RetrieveAPIViewの クラスBooksListAPIView(ListCreateAPIViewを): クエリセット = models.Book.objects.filter(is_delete = 偽) serializer_class = serializers.BooksModelSerializer #3ビューセット:视图集(整合ミックスイン到ジェネリック)、 から rest_framework インポートビューセットの クラス:BooksGenericViewSet(mixins.ListModelMixin、mixins.RetrieveModelMixin、viewsets.GenericViewSet) クエリセット = models.Book.objects.filter(is_delete = 偽) serializer_class =serializers.BooksModelSerializer デフ create_many_or_one(自己、要求、* argsを、** kwargsから): request_data = request.data 多くの真= 場合でisinstance(request_data、リスト)それ以外はFalse book_ser = serializers.BooksModelSerializer(データ= request_data、多くの= 多くの) 場合book_ser.is_valid(): book_obj_list = book_ser.save() の戻り APIResponse(0、' OK '、serializers.BooksModelSerializer(book_obj_list、=多くの).dataの多くの) 他: リターン APIResponse(1、' 失敗'、book_ser.errors)
ルーティング層:
django.conf.urls インポートURLが含まれる から。インポートビュー urlpatterns = [ URL(R ' ^ V1 /書籍/ $ ' 、views.BooksGenericAPIView.as_view())、 URL(R ' ^ V1 /書籍/(?P <PK> \ D +)/ ' 、views.BooksGenericAPIView .as_view())、 URL(R ' ^ V2 /書籍/ $ ' 、views.BooksMixinsGenericAPIView.as_view())、 URL(R ' ^ V2 /書籍/(?P <PK> \ D +)/ ' 、意見。 BooksMixinsGenericAPIView.as_view())、 URL(R ' ^ V3 /書籍/ $ '、views.BooksListAPIView.as_view())、 URL(R ' ^ V3 /書籍/(P <PK> \ D +?)/ ' 、views.BooksListAPIView.as_view())、 #重点: URL(R " ^ V4 /図書/ $ 'views.BooksGenericViewSet.as_view({ ' 得る':' リスト' ' ポスト':' create_many_or_one ' }))、 URL(R ' ?^ V4 /書籍/(P <PK> \ D +)/ 'views.BooksGenericViewSet.as_viewは、({ ' 得ます':'取得" }))、 ] から rest_framework.routers インポート SimpleRouterの #V4用の別の方法 ルータ= SimpleRouter() router.register(' V4 /書籍'、views.BooksGenericViewSet、BASE_NAME = ' ブック') #の逆引き参照のためBASE_NAME = 'ブック' #印刷(router.get_urls()) #印刷(router.urls) urlpatterns.extend(router.urls)
認定コンポーネント
カスタム認証クラス
rest_framework.authenticationの輸入BaseAuthentication から rest_framework 輸入例外 クラスTokenAuthentication(BaseAuthentication): デフ(自己、リクエスト)を認証: トークン = request._request.META.get(' HTTP_TOKEN ') #前后台分离项目、认证字段通常为トークン の場合トークン=!' 123321 ' : 上げる exceptions.NotAuthenticatedを(' 认证失败' ) の戻りなし
settings.py
REST_FRAMEWORK = { ' DEFAULT_AUTHENTICATION_CLASSES ' ( #'rest_framework.authentication.SessionAuthentication' #'rest_framework.authentication.BasicAuthentication'、 'api.authentication.TokenAuthentication'、#开启自定义类全局认证 ) }
ビューレイヤー
rest_framework 輸入ジェネリック、ビューセット、ミックスイン から。輸入モデル、シリアライザ クラスUsersRetrieveAPIView(generics.RetrieveAPIView): authentication_classes =() #局部解除认证 クエリセット= models.User.objects.filter(is_delete = False)が serializer_class = serializers.UsersModelSerializer から。インポート認証 クラスCarsGenericViewSet(mixins.RetrieveModelMixin、mixins.ListModelMixin、viewsets.GenericViewSet): authentication_classes=(authentication.TokenAuthentication) #局部开启认证 クエリセット= models.Car.objects.filter(is_delete = 偽) serializer_class = serializers.CarsModelSerializer
ルーティング層
django.conf.urls インポートURLが含まれる から。インポートビュー urlpatterns = [ URL(R ' ^ユーザ/(?P <PK> \ D +)/ ' 、views.UsersRetrieveAPIView.as_view())、 URL(R ' ^車/ $ '、views.CarsGenericViewSet.as_view({ ' 取得':' リスト' }))、 URL(R ' ^車/(P <PK> \ D +)/?'、views.CarsGenericViewSet.as_view({ ' 得る':' 検索' ]