日84drf

ビューファミリー

  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({ ' 得る'' 検索'
]

 

おすすめ

転載: www.cnblogs.com/klw1/p/11371283.html