美文网首页
Django rest framework 自定义url

Django rest framework 自定义url

作者: 河码匠 | 来源:发表于2021-09-08 14:27 被阅读0次

    一、自定义增删改查外的方法和路由

    使用 from rest_framework.viewsets import GenericViewSet, ViewSet 这两个模块。

    示例:使用 GenericViewSet 以用户修改密码为例

    # view.py
    from rest_framework.viewsets import GenericViewSet
    
    class CustomerOperation(GenericViewSet):
    
        @action(detail=False, methods=['post'])
        def set_password(self, request, pk):
            return return_200(_('Successfully change password'))
    
    # urls.py
    from rest_framework import routers
    
    router = routers.DefaultRouter()
    router.register('', CustomerOperation)
    
    urlpatterns = [
        # 方法一
        path('<str:pk>/', include(router.urls)),
        # 方法二
        path('<str:pk>/set_password', AloneCustomerOperation.as_view({'post': 'set_password'})),
    ]
    
    
    定义 url 使用的提交类型,两种方法

    方法一、@action(detail=False, methods=['post']) 修饰函数直接在方法前面定义提交方式即可。
    方法二、path('<str:pk>/set_password', AloneCustomerOperation.as_view({'post': 'set_password'})), 定义url,set_password 是 url 要请求的方法,post 是请求的方式

    区别:
    方法一会自动把 view 类中标记 action 的所有方法自动生成路由。路由名就是方法名称。
    方法二是当有一些个性化定义路由时使用

    二、自定义 drf 中提供的 list create retrieve update destroy方法的路由

    drf 提供两个类
    ReadOnlyModelViewSet: 只有 Retrieve 和 List
    ModelViewSet: 有 Create、Retrieve、Update、Destroy、List 方法
    当然也可以自定义想用的方法使用 from rest_framework import mixins 中的 CreateModelMixin RetrieveModelMixin UpdateModelMixin DestroyModelMixin ListModelMixin 五个方法来自定义。还需要在继承 'GenericViewSet'。

    示例:

    @method_decorator(name="retrieve", decorator=.....)
    from rest_framework.viewsets import ReadOnlyModelViewSet
    
    class AAAList(ReadOnlyModelViewSet):
    
        serializer_class = AAASerializers
        queryset = AAA.objects.all()
    
        # 重构 list  也可以使用默认的 list
        def list(self, request):
            queryset = self.get_queryset()
            serializer = CustomerProductTypeQuota(queryset, many=True)
            return Response(serializer.data)
    

    定义路由方式和上面相同

    \color{red}{注意}:当使用method_decorator
    swagger_auto_schema 去修改 api 文档页面时 name 对应的是方法的名字

    相关文章

      网友评论

          本文标题:Django rest framework 自定义url

          本文链接:https://www.haomeiwen.com/subject/kksvwltx.html