简体   繁体   English

我如何用路由器重写我的代码? Django rest 框架

[英]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

Edit编辑

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.

相关问题 Django Rest Framework组织视图集和路由器 - Django Rest Framework organizing ViewSets and Routers 我应该怎么做才能在 django rest 框架中的代码中发布多个内容? - what should i do to be able to post multiple contents in my code in django rest framework? 如何将项目列表从我的 UI 发送到我的 Django Rest 框架 API? - How do I send a list of items from my UI to my Django Rest Framework API? django rest framework-序列化器,read_only和drf-nested-router,如何设置父级? - django rest framework- serializers, read_only, and drf-nested-routers, how to set parent? 我如何在Django Rest Framework API中包括中介模型 - How do I include intermediary Models in my Django Rest Framework API 如何在Django REST Framework中为用户注册视图集编码密码? - How do I encode the password for my user registration viewset in Django REST Framework? Django Rest Framework,具有多个Viewset和Routers,用于同一对象 - Django Rest Framework with multiple Viewsets and Routers for the same object 在Django-REST-FrameWork中使用ViewSet和路由器搜索端点 - Search endpoint with ViewSet & Routers in Django-REST-FrameWork Django Rest框架:具有自定义路径的routers.DefaultRouter()url - django rest framework: routers.DefaultRouter() url with custom path 我如何在 django rest 框架 api 中生成二维码 - How I generate qr code in django rest framework api
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM