ルートRouters

4314 ワード

ルートRouters
ビューセットViewSetについては、要求方式と動作actionとの対応関係を自分で手動で示すことができるほか、Routersを使用してルーティング情報を迅速に実現することができる.REST frameworkは、2つのrouterを提供します.
  • SimpleRouter
  • DefaultRouter

  • 一、使用方法
  • は、routerオブジェクトを作成し、
  • などのビューセットを登録する.
    from rest_framework import routers
    
    router = routers.DefaultRouter()
    router.register(r'router_stu', StudentModelViewSet, base_name='student')
    
    register ( prefix, viewset, base_name )
  • prefixこのビューセットのルーティングプレフィックス
  • .
  • viewsetビューセット
  • base_nameルーティング別名のプレフィックス
  • 上記のコードによって形成されるルーティングは以下の通りである.
    ^books/$    name: book-list
    ^books/{pk}/$   name: book-detail
    
  • ルーティングデータ
  • を追加する.
    次の2つの方法があります.
    urlpatterns = [
        ...
    ]
    urlpatterns += router.urls
    

    または
    urlpatterns = [
        ...
        url(r'^', include(router.urls))
    ]
    

    ルーティングクラスを使用してビューセットにルーティングアドレスを生成
    from rest_framework.viewsets import ModelViewSet,ReadOnlyModelViewSet
    
    class StudentModelViewSet(ModelViewSet):
        queryset = Student.objects.all()
        serializer_class = StudentModelSerializer
    
        def login(self,request):
            """      """
            print(self.action)
            return Response({"message":"    "})
    

    ルーティングコード:
    from django.urls import path, re_path
    from . import views
    
    urlpatterns = [
        ...
    ]
    
    """  drf     router          """
    #       
    # drf                 ,      ,      
    from rest_framework.routers import DefaultRouter
    router = DefaultRouter()
    
    #      
    # router.register("    ",    )
    router.register("router_stu",views.StudentModelViewSet)
    
    #            urlpatterns
    print( router.urls )
    urlpatterns += router.urls
    

    上記のコードは、ルーティングアドレス[ / / / / ]を生成することに成功したが、図面セットのカスタムメソッドのルーティングは自動的には行われない.
    したがって,カスタムメソッドにもルーティングを生成するには,action動作の宣言が必要である.
    二、ビューセットにactionを添付する声明
    ビューセットでは、Routerがカスタム動作のルーティング情報を自動的に生成するのに役立つようにするには、rest_framework.decorators.action装飾器を使用する必要があります.actionで装飾する方法名はaction動作名とし、listretrieveと同等とする.action装飾器は、2つのパラメータを受信することができる.
  • methods:このactionに対応する要求方式を宣言し、リスト伝達
  • detail

  • このactionのパスが単一のリソースに対応しているかどうか、およびそうであるかどうかを宣言します.
    xxx//action   /
    
  • Trueは、経路フォーマットがxxx//action /
  • であることを示す.
  • Falseは、経路フォーマットがxxx/action /
  • であることを示す.
    例:
    from rest_framework.viewsets import ModelViewSet
    from rest_framework.decorators import action
    
    class StudentModelViewSet(ModelViewSet):
        queryset = Student.objects.all()
        serializer_class = StudentModelSerializer
    
        # methods           http          
        # detail                  
        # detail True,           router_stu/{pk}/login/
        @action(methods=['get'], detail=True)
        def login(self, request,pk):
            """  """
            ...
            pass
    
        # detail False            router_stu/get_new_5/
        @action(methods=['put'], detail=False)
        def get_new_5(self, request):
            """       5     """
            ...
            pass
        

    ルータがこのビューセットのカスタムactionメソッドを自動的にカスタマイズするルートは、次のとおりです.
    ^router_stu/get_new_5/$    name: router_stu-get_new_5
    ^router_stu/{pk}/login/$   name: router_stu-login

    三、ルーティングrouterがURLを形成する方式
    3.1 SimpleRouter
    3.2 DefaultRouter DefaultRouterSimpleRouterの違いは、DefaultRouterがデフォルトのAPI本のビューを追加し、すべてのリストビューを含むハイパーリンク応答データを返すことです.
    次の学習を容易にするために,新しいサブアプリケーションoptを作成した.
    python manage.py startapp opt
    

    次の機能ではログイン機能を使用する必要があるため、django内蔵adminサイトを使用して管理者を作成します.
    python manage.py createsuperuser
    

    管理者を作成した後、adminサイトにアクセスし、サイトの言語構成を変更します.settings.py adminサイトへのアクセス:http://127.0.0.1:8000/admin/