[英]How do i rewrite my code with Routers? Django rest framework
I have this REST API:我有这个 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'}))
]
How can i rewrite this with routers?我如何用路由器重写它?
Default router with register method creates API -> GET users/
and POST users/
and also DELETE /users/{id}
but it's different from current, because i need DELETE /users/
endpoint.具有注册方法的默认路由器创建 API ->
GET users/
和POST users/
以及DELETE /users/{id}
但它与当前不同,因为我需要DELETE /users/
端点。
Or, maybe, in this situation it would be more correct to use my code with dictionaries?或者,也许,在这种情况下,将我的代码与字典一起使用会更正确吗?
assuming that UserViewSet
is indeed a viewset, you can use the restframework's default router to register the router for /users/
, and then add an action to handle you /video/
route from that viewset.假设
UserViewSet
确实是一个视图集,您可以使用 restframework 的默认路由器为/users/
注册路由器,然后添加一个操作来处理来自该视图集的/video/
路由。
urls.py网址.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视图集.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
To create a bulk DELETE
of users endpoint, I would create a Mixin class, as there is no django mixin for Deleting on the index of a router..要创建用户端点的批量
DELETE
,我会创建一个 Mixin class,因为在路由器的索引上没有用于删除的 django mixin。
class BulkDeleteModelMixin:
def destroy(self, request, *args, **kwargs):
queryset = self.filter_queryset(self.get_queryset())
self.perform_destroy(queryset)
headers = self.get_success_headers(serializer.data)
return Response(serializer.data,
status=status.HTTP_201_CREATED, headers=headers)
def perform_destroy(self, queryset):
queryset.delete()
And inherit from this class in your viewset并从您的视图集中的这个 class 继承
viewsets.py视图集.py
from rest_framework.viewsets import GenericViewSet
from rest_framework.mixins import (CreateModelMixin, RetrieveModelMixin, ListModelMixin)
from some_app.mixins import BulkDeleteModelMixin
class UserViewSet(CreateModelMixin, RetrieveModelMixin,
BulkDeleteModelMixin, ListModelMixin, GenericViewSet):
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.