Django rest framework 自定义url

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

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

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

python 复制代码
# 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'。

示例:

python 复制代码
@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 对应的是方法的名字

相关推荐
qq_417695054 小时前
机器学习与人工智能
jvm·数据库·python
漫随流水4 小时前
旅游推荐系统(view.py)
前端·数据库·python·旅游
薛定谔的悦4 小时前
MQTT通信协议业务层实现的完整开发流程
java·后端·mqtt·struts
enjoy嚣士5 小时前
springboot之Exel工具类
java·spring boot·后端·easyexcel·excel工具类
yy我不解释5 小时前
关于comfyui的mmaudio音频生成插件时时间不一致问题(一)
python·ai作画·音视频·comfyui
无限大65 小时前
职场逻辑03:3步搞定高效汇报,让领导看到你的价值
后端
盐水冰6 小时前
【烘焙坊项目】后端搭建(12) - 订单状态定时处理,来单提醒和顾客催单
java·后端·学习
紫丁香6 小时前
AutoGen详解一
后端·python·flask
FreakStudio6 小时前
不用费劲编译ulab了!纯Mpy矩阵micronumpy库,单片机直接跑
python·嵌入式·边缘计算·电子diy
小涛不学习6 小时前
Spring Boot 详解(从入门到原理)
java·spring boot·后端