Как переписать мой код с помощью Routers? Django rest framework
У меня есть этот REST API:
urlpatterns = [
path('admin/', admin.site.urls),
path('users/', UserViewSet.as_view({'get': 'list',
'post': 'create',
'delete': 'delete'})),
path('users/<uuid:pk>/video/', UserViewSet.as_view({'post': 'video'}))
]
Как я могу переписать это с помощью маршрутизаторов?
По умолчанию маршрутизатор с методом регистрации создает API, отличный от текущего.
Или, может быть, в данной ситуации правильнее было бы использовать мой код?
предполагая, что UserViewSet
действительно является набором представлений, вы можете использовать маршрутизатор по умолчанию restframework для регистрации маршрутизатора для /users/
, а затем добавить действие для обработки маршрута /video/
из этого набора представлений.
urls.py
from rest_framework.routers import DefaultRouter
router = DefaultRouter()
router.register(r'users/', UserViewSet, basename='users')
urlpatterns = [
path('admin/', admin.site.urls),
]
urlpatterns += router.urls
viewsets.py
from rest_framework.viewsets import GenericViewSet
from rest_framework.mixins import (
CreateModelMixin, RetrieveModelMixin, DestroyModelMixin, ListModelMixin
)
from rest_framework.decorators import action
from rest_framework.parsers import MultiPartParser
class UserViewSet(CreateModelMixin, RetrieveModelMixin, DestroyModelMixin, ListModelMixin, GenericViewSet):
# serializer class
# queryset
# permissions
@action(methods=['post'], parser_classes=(MultiPartParser,), detail=True)
def video(self, request, pk=None, *args, **kwargs):
# Implementation to upload a video