ルートRouters
4314 ワード
ルートRouters
ビューセット SimpleRouter DefaultRouter
一、使用方法は、 などのビューセットを登録する. . 上記のコードによって形成されるルーティングは以下の通りである.ルーティングデータ を追加する.
次の2つの方法があります.
または
ルーティングクラスを使用してビューセットにルーティングアドレスを生成
ルーティングコード:
上記のコードは、ルーティングアドレス
したがって,カスタムメソッドにもルーティングを生成するには,
二、ビューセットにactionを添付する声明
ビューセットでは、 methods:この detail
この Trueは、経路フォーマットが であることを示す. Falseは、経路フォーマットが であることを示す.
例:
ルータがこのビューセットのカスタムactionメソッドを自動的にカスタマイズするルートは、次のとおりです.
三、ルーティングrouterがURLを形成する方式
3.1 SimpleRouter
3.2 DefaultRouter
次の学習を容易にするために,新しいサブアプリケーション
次の機能ではログイン機能を使用する必要があるため、
管理者を作成した後、
ビューセット
ViewSet
については、要求方式と動作action
との対応関係を自分で手動で示すことができるほか、Routers
を使用してルーティング情報を迅速に実現することができる.REST framework
は、2つのrouter
を提供します.一、使用方法
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
動作名とし、list
、retrieve
と同等とする.action
装飾器は、2つのパラメータを受信することができる.action
に対応する要求方式を宣言し、リスト伝達この
action
のパスが単一のリソースに対応しているかどうか、およびそうであるかどうかを宣言します.xxx//action /
xxx//action /
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
DefaultRouter
とSimpleRouter
の違いは、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/